二维数组
- 格式: 数据类型 数组名称[一维数组的个数][一维数组中元素的个数];
- 数据类型: 一维数组中存储数据的类型
- 数组名称: 标识符
- 二维数组其实也是一个数组, 只不过数组中的元素比较特殊, 每个元素又是一个数组而已
二维数组的遍历
for(int i = 0; i < 2; i++){
for(int j = 0; j < 3; j++){
printf("scores[%i][%i] = %i\n", i, j,scores[i][j]);
}
}
二维数组的内存表现形式
char chs[2][3] = {{'l','n','j'}, {'z','q','x'}};
图片如下:
由图可见:
chs = &chs = &chs[0] = &chs[0][0] //结果都为二维数组中第一维数组中首元素的地址
二维数组和函数
注意点:
1.如果形参时基本数据类型, 那么在函数内修改形参不会影响到外界的实参
2.如果形参是数组, 那么在函数内修改形参会影响到外界的实参
void change1(char ch){
ch = 'T';
}
char chs[2][3] = {{'l','n','j'}, {'z','q','x'}};
printf("chs[0][0] = %c\n", chs[0][0]); // l
change1(chs[0][0]);
printf("chs[0][0] = %c\n", chs[0][0]); // l
注意点:以下代码改变的是chs[1][0]的数据!!!
void change2(char ch[]){
ch[0] = 'T';
}
printf("chs[0][0] = %c\n", chs[0][0]); // l
change2(chs[1]);
printf("chs[1][0] = %c\n", chs[1][0]); // T
注意点:以下代码二维数组的一位数组的元素个数不能少
void change3(char ch[][3]){
ch[0][0] = 'T';
}
printf("chs[0][0] = %c\n", chs[0][0]); // l
change3(chs);
printf("chs[0][0] = %c\n", chs[0][0]); // T
二维数组的初始化
1.定义的同时初始化 {{},{}}
int nums[2][3] = {{1, 3, 5},{2, 4, 6}};
2.先定义再初始化
int nums[2][3];
nums[0][0] = 999;
nums[0][1] = 888;
nums[0][2] = 777;
nums[1][0] = 666;
nums[1][1] = 555;
nums[1][2] = 444;
3.特殊的方式 (作为了解)
如果在定义的同时初始化, 那么二维数组中一维数组的个数可以省略
int nums[][3] = {{1, 3, 5},{2, 4, 6}};
如果在定义的同时初始化, 那么初始化中每个一维数组的{}也可以省略
会依次从前往后存入一维数组
int nums[][3] = {1, 3, 5 ,2, 4};
{{1, 3, 5},{2, 4, 0}}
注意点: 二维数组中每一个一维数组元素的个数不能省略
以下定义都会报错
int nums[2][] = {{1, 3, 5},{2, 4, 6}};
int nums[][] = {{1, 3, 5},{2, 4, 6}};
int nums[2][3];
nums = {{1, 3, 5},{2, 4, 6}};
网友评论