猿问

为什么c中二维数组声明只能省略行数?

人心可畏1
浏览 8202回答 4
4回答

asd8532

   将二维数组当作参数的时候,必须指明所有维数大小或者省略第一维的,但是不能省略第二维或者更高维的大小,这是由编译器原理限制的。事实上,编译器是这样处理数组的:      设有数组int a[m][n],如果要访问a[i][j]的值,编译器的寻址方式为:     &a[i][j]=&a[0][0]+i*sizeof(int)*n+j*sizeof(int); //注意n为第二维的维数,因此,可以省略第一维的维数,不能省略其他维的维数。    在定义二维数组的时候对其进行初始化,也可以省略第一维,编译器会根据你的初始化语句自动决定第一维度。

玄幻痴迷

二维数组存储的时候是"先行后列",, 如果不指定列数, 它就不能知道一行放几个数据了。在初始化的时候,第二维的数字代表分配内存的长度,第一维的数字代表分配内存倍数;倍数可以让机器去数,但长度没有的话就不好开辟空间了。

小雾3378873

那就先把他放下,别太纠结,等把寻址等相关知识掌握了,再返过头来看,就会明白了,实际上我也没看懂,^_^等我学到后面知识后一定会来看!
随时随地看视频慕课网APP
我要回答