数组初始化有一个很好的数组初始化列表。我有一个
int array[100] = {-1};
期望它充满-1,但它不是,只有第一个值是,其余都是0和随机值的混合。
的代码
int array[100] = {0};
工作很好,并将每个元素设置为0。
我错过了什么…如果值不为零,就不能初始化它吗?
和2:是默认的初始化(如上所述)比通常的循环通过整个数组和赋值还是做同样的事情?
数组初始化有一个很好的数组初始化列表。我有一个
int array[100] = {-1};
期望它充满-1,但它不是,只有第一个值是,其余都是0和随机值的混合。
的代码
int array[100] = {0};
工作很好,并将每个元素设置为0。
我错过了什么…如果值不为零,就不能初始化它吗?
和2:是默认的初始化(如上所述)比通常的循环通过整个数组和赋值还是做同样的事情?
当前回答
用你用过的语法,
int array[100] = {-1};
表示“将第一个元素设置为-1,其余为0”,因为所有省略的元素都设置为0。
在c++中,要将它们都设置为-1,你可以使用类似std::fill_n (from <algorithm>):
std::fill_n(array, 100, -1);
在便携式C语言中,你必须自己进行循环。有编译器扩展,或者如果可以接受,可以依赖实现定义的行为作为快捷方式。
其他回答
您链接的页面状态
如果指定了显式数组大小,但指定了较短的初始化列表,则未指定的元素将被设置为零。
速度问题:对于这么小的数组,任何差异都可以忽略不计。如果您使用大型数组,并且速度比大小更重要,那么您可以使用默认值的const数组(在编译时初始化),然后将它们memcpy到可修改数组。
另一种将数组初始化为公共值的方法是实际生成一系列定义中的元素列表:
#define DUP1( X ) ( X )
#define DUP2( X ) DUP1( X ), ( X )
#define DUP3( X ) DUP2( X ), ( X )
#define DUP4( X ) DUP3( X ), ( X )
#define DUP5( X ) DUP4( X ), ( X )
.
.
#define DUP100( X ) DUP99( X ), ( X )
#define DUPx( X, N ) DUP##N( X )
#define DUP( X, N ) DUPx( X, N )
将数组初始化为一个公共值很容易做到:
#define LIST_MAX 6
static unsigned char List[ LIST_MAX ]= { DUP( 123, LIST_MAX ) };
注意:引入DUPx是为了在参数中对DUP进行宏替换
对于单字节元素数组,可以使用memset将所有元素设置为相同的值。
这里有一个例子。
使用{}可以在声明元素时赋值;其余部分初始化为0。
如果没有={}来初始化,则内容是未定义的。
用你用过的语法,
int array[100] = {-1};
表示“将第一个元素设置为-1,其余为0”,因为所有省略的元素都设置为0。
在c++中,要将它们都设置为-1,你可以使用类似std::fill_n (from <algorithm>):
std::fill_n(array, 100, -1);
在便携式C语言中,你必须自己进行循环。有编译器扩展,或者如果可以接受,可以依赖实现定义的行为作为快捷方式。