为什么二维数组的行数可以省略,但列数不可以

答案:
因为省略了列数无法寻址。


我们这里举个例子

省略行数的情况

int a[][2] = {1,2,3,4}

那实际它的存储方式是

1列 2列
1行 1 2
2行 3 4
n行

实际情况是在计算机中所有的数据都在一行存储,因此实际的存储方式是

1,2,3,4,…

在这种情况下想要找到a[m][n],寻址方式是a+8*m+n,因为一行是两个int,所以是8


省略列数的情况

int a[2][] = {1,2,3,4}

那它的存储方式是

1列 2列 n列
1行 1 2
2行 3 4

在计算机中所有的数据都在一行存储,因此它的实际存储方式为
1,2,…,3,4,…

在这种情况下想要找到a[m][n],会发现按照之前的方式无法寻址,因为无法确定每一行的长度,地址是a+x*m+n,其中x是每一行的长度,这个值不固定无法寻址。

你可能感兴趣的:(C,c语言)