首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

《C和指针》下的一个有关问题

2012-09-29 
《C和指针》上的一个问题8.2.7节数组长度自动计算在多维数组中,只有第1维才能根据初始化列表缺省地提供。剩余

《C和指针》上的一个问题
8.2.7节数组长度自动计算
在多维数组中,只有第1维才能根据初始化列表缺省地提供。剩余的几个维必须显式地写出,这样编译器就能推断出每个子数组维数的长度。例如:

C/C++ code
int two_dim[][5] = {    { 00, 01, 02 },     { 10, 11 },    { 20, 21, 22, 23 }}

编译器只要数一下初始化列表中所包含的初始值个数,就可以推断出最左边一维为3。
为什么其他维的大小无法通过对它的最长初始列表个数进行计数自动推断出来呢?原则上,编译器能够这样做。但是,这需要每个列表中的子初始列表至少有一个要以完整的形式出现(不得省略末尾的初始值),这样才能保证编译器正确地推断出每一维的长度。但是,如果我们要求除第1维之外的其他维的大小都显式提供,所有的初始值列表都无需完整。

这段话的解释我看着好糊涂,谁给我点直观的解释,为啥最左边一维推断出来是3。


[解决办法]
你可以把二维数组看成一个数组的元素还是数组:
就像:int a[] = {1, 2, 3};//这个就是3个元素的数组
所以:int a[][3] = {{1,2,3}, {4,5,6}};//这个就是包含2个元素的数组,而每个元素又是一个包含3个整形的数组
[解决办法]
一维的值为3的推断是通过初始化里多少个内嵌的{};如果内嵌的没有{};则通过计算数据的总个数整除二维的长度。

热点排行