C ++数组初始化不起作用

时间:2010-08-30 18:39:39

标签: c++ arrays gcc

我正在尝试像这样初始化一组bool:

bool FcpNumberIsOk[MAX_FCPS]={true};

但是当我调试它时,我只看到数组的第一个元素被初始化,其他元素都是假的。怎么会这样?我在ubuntu 10上使用Qt,初始化是在方法内的本地数组上完成的。

好的,谢谢你的回答。

5 个答案:

答案 0 :(得分:10)

你误会了。您似乎可以将任何未提及的元素初始化为与上一个显式初始化值相同的值。您提到的最后一个值是true,因此所有其他元素也会初始化为true。我曾经有同样的信念,但我很快就学会了。

这不是它的工作原理。任何未提及的元素都会默认初始化,bool表示false

要将所有元素设置为true,请尝试使用std::fill_n

std::fill_n(FcpNumberIsOk, MAX_FCPS, true);

答案 1 :(得分:9)

因为这是数组初始化在C ++中的工作方式。如果没有为每个元素显式赋值,则该元素默认为零(或者,此处为false)

 bool FcpNumberIsOk[MAX_FCPS]={true, true, true, true /* etc */ };

请注意

 bool FcpNumberIsOk[MAX_FCPS];

将所有值设置为false 将它们随机设置,具体取决于定义的位置。

答案 2 :(得分:2)

这是预期的行为。第一个元素初始化为指定值,余数初始化为默认值0:

int c[5] = {1};

// 1 0 0 0 0
for(int i = 0; i < 5; ++i)
  std::cout << c[i] << ' ';

答案 3 :(得分:-1)

因为您只显式初始化了数组的第一个元素,所以只初始化了第一个元素,而剩下的不是。

答案 4 :(得分:-1)

使用此语法,您只是初始化第一个元素(使用您的值和其他get default-one [false]),而不是其他元素。 您应该使用int数组和memset或for循环来初始化所有元素。