#学习笔记# #C语言# 有关二维数组的总结 (本人也是正在学习C语言的新手,遇到问题分享出来与大家一起探讨,难免有错误之处,欢迎大家指出)
(一) 对二维数组的理解:理解二维数组时,将其按“行”收缩,然后按照一维数组理解,如下:
int a[3][4]={0};
其实,a[3][4]={ a[0], a[1], a[2] }; 相当于一个拥有三个元素的一维数组,只不过这三个元素又各自是一个一维数组,即:
a[0]={ a[0][0], a[0][1], a[0][2], a[0][3] };
a[1]={ a[1][0], a[1][1], a[1][2], a[1][3] };
a[2]={ a[2][0], a[2][1], a[2][2], a[2][3] };
(二) 对数组名的理解:
int a[3][4]={0};
(1)一般情况: ①:二维数组的数组名a,表示首元素地址,而二维数组的首元素是整个第一行(a[0] ),即&a[0] ,将该地址赋给指针时,指针的类型应该是 数组指针。 ②:一维数组的数组名a[0] 表示它自己的首个元素地址,即&a[0][0] 。
(2)两种特殊情况(sizeof(数组名)和&数组名): ①-①:sizeof(a); 此时的a 不再代表二维数组的首元素地址,代表的是整个二维数组;sizeof(a) 是计算整个二维数组占内存空间的大小,单位是字节(344=48)。 ①-②:sizeof(a[0]) ,此时的a[0] 也不再代表一维数组的首元素地址,代表的是整个一维数组(二维数组的第一行);sizeof(a[0]) 是计算整个一维数组占内存空间的大小,单位是字节(4*4=16)。 ②-①:&a ,此时的a 不再代表二维数组的首元素地址,代表的是整个二维数组;&a是取整个二维数组的地址,(&a+1) 时就跳过了该数组,代表另外一个二维数组的地址。 ②-②:&a[0] ,此时的a[0] 也不再代表一维数组的首元素地址,代表的是整个一维数组(二维数组的第一行);(&a[0]+1) 时就跳过了该一维数组(二维数组的第一行),代表另外一个一维数组a[1](二维数组的第二行)的地址。
|