当我们像这样初始化一个数组时int a[5] = {0}
,编译器会将所有 5 个元素设为 0。这真的很好,紧凑初始化和有用的功能。
但我想知道为什么编译器没有int a[5]={1}
类似地初始化?为什么它不能使所有 5 个元素都为 1?为什么标准不强制要求它?这不是一个很棒的功能吗?是不是不见了?
此外,如果初始化程序中的元素数量小于数组的大小,则编译器可以使用初始化程序中的最后一个元素初始化剩余的元素。意思int a[5]={1,2,3}
是,等价于int a[5]={1,2,3,3,3}
。同样,int a[10]={1,2,3,0}
等价于int a[10]={1,2,3,0,0,0,0,0,0,0};
。
如果标准要求它,这一切都不是一个很棒的功能吗?或者这个缺失的功能有什么好的理由吗?
在 C99 中有一个叫做指定初始化器的东西,它的用法如下:
指定初始化器可以与常规初始化器结合使用,如下例所示:
int a[10] = {2, 4, [8]=9, 10}
在这个例子中,a[0] 被初始化为 2,a 1被初始化为 4,a[2] 到 a[7] 被初始化为 0,a[9] 被初始化为 10。
很有趣。但即使这个特性在 C++ 中也没有。