建设电子商务网站需要什么,中国网络安全官网,牧风 wordpress,网站建设公司测评文章目录 使用括号进行初始化初始化省略维度 使用括号进行初始化
我们可以给数组赋值一个长长的列表#xff1a;
int matrix[2][3] { 100, 101, 102, 110, 111, 112 };它等价于
matrix[0][0]100;
matrix[0][1]101;
matrix[0][2]102;
matrix[1][0]110;
matrix[1][1]111;
ma… 文章目录 使用括号进行初始化初始化省略维度 使用括号进行初始化
我们可以给数组赋值一个长长的列表
int matrix[2][3] { 100, 101, 102, 110, 111, 112 };它等价于
matrix[0][0]100;
matrix[0][1]101;
matrix[0][2]102;
matrix[1][0]110;
matrix[1][1]111;
matrix[1][2]112;但是强烈建议下面的形式进行二维数组初始化
int two_dim[3][5] {{00, 01, 02, 03, 04},{10, 11, 12, 13, 14},{20, 21, 22, 23, 24}
};三维数组初始化
int three_dim[2][3][5] {{{000,001,002,003,004},{010,011,012,013,014},{020,021,022,023,024}}{(100,101,102,103,104},{110,111,112,113,1141,{120,121,122,123,124}}
};更高维的数组也是一样的。 既然加不加那些花括号对初始化过程不会产生影响那么为什么要不厌其烦地加上它们呢 首先是它有利于显示数组的结构。一个长长的单一数字列表使你很难看清哪个值位于数组中的哪个位置。因此花括号起到了路标的作用使你更容易确信正确的值出现在正确的位置。其次对于不完整的初始化列表花括号就相当有用。如果没有这些花括号你只能在初始化列表中省略最后几个初始值。即使一个大型多维数组只有几个元素需要初始化你也必须提供一个非常长的初始化列表因为中间元素的初始值不能省略。但是如果使用了这些花括号每个子初始列表都可以省略尾部的几个初始值。同时每一维的初始列表各自都是一个初始化列表。 为了说明这个概念我们对一个四维数组初始化列表假定我们只需要对数组的两个元素进行初始化元素[0][0][0][0]初始化为100元素[1][0][0][0]初始化为200其余的元素都缺省地初始化为0。下面是我们用于完成这个任务的方法
int four_dim[2][2][3]{5]{{{{100}}},{{{200}}}
};如果初始化列表内部不使用花括号我们就需要下面这个长长的初始化列表
int four_dim[2][2][3][5](100, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200}:这个列表不仅难于阅读而且一开始要准确地把100和200这两个值放到正确的位置都很困难。
初始化省略维度
在多维数组中只有第1维才能根据初始化列表缺省地提供。剩余的几个维必须显式地写出这样编译器就能推断出每个子数组维数的长度。
int two_dim[][5]{ { 00, 01, 02 }, { 10, 11 }, { 20, 21, 22, 23 }
}编译器只要数一下初始化列表中所包含的初始值个数就可以推断出最左边一维为3。
为什么其他维的大小无法通过对它的最长初始列表的初始值个数进行计数自动推断出来呢
原则上编译器能够这样做。但是这需要每个列表中的子初始值列表至少有一个要以完整的形式出现不得省略末尾的初始值这样才能保证编译器正确地推断出每一维的长度。但是如果我们要求除第1维之外的其他维的大小都显式提供所有的初始值列表都无需完整。
参考
《C和指针》