是不是有点疑惑,上面a2, &a2, &a2[0][0]地址一样,为什么*号取出来的值就不一样,说明表示的含义不一样。
a2表示行地址
&a2表示整个二维数组的地址
&a2[0][0] 表示二维数组第一个元素的地址
看下上面打印的结果:
数组名去sizeof就是整个数据大小的数据,其余&取值,都表示地址,按照4个字节处理
然后sizeof里面如果有*,就表示这片空间的大小。
再来说一下:sizeof(*二维数组名字) sizeof(*一维数组名字) 第一个数据是一个行指针,第二个数据就是代表具体的某一个数据的大小,具体是数据类型的大小。
上面打印结果就是:20 4
下面说一下指向数组的指针
int (*p)[3]这个指针就是指向数组,同时也可以表示成二维数组的指针,他的行数是固定的,我们必须指定列数。简要说明一下:二维数组指针其实就是一个一维数组指针。
说一下我写的时候犯过的错误:
上面如果是第一种,我们根本不能循环打印出值。
切记不能用int **来保存二维数组的首地址