C语言二维数组

2018-09-06  本文已影响0人  AuglyXu

二维数组

二维数组的遍历

    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}};
上一篇 下一篇

猜你喜欢

热点阅读