在C中,未初始化的布尔数组的默认值是多少?

时间:2015-02-06 20:34:42

标签: c boolean

我有类似的东西,

#include <stdio.h>
#include <stdbool.h>

int main()
{
    int t,answer;
    bool count;
    long long int L;
    scanf("%d",&t);
    while(t>0)
    {
        answer = 0;
        scanf(" %lld",&L);
        bool count[L];
  //  .....restofthecode. NDA Constraint.

arr[x]的所有元素的默认值是什么? 是false 总是吗?还是true?或任何随机值?

2 个答案:

答案 0 :(得分:4)

C中没有名为boolean的类型,但_Boolstdbool.h中的bool宏扩展为_Bool

#include <stdbool.h>

#define X 42
bool arr[X];

arr元素的初始值为false(即0),如果在文件范围内声明,则在块范围内声明时不确定。

在块范围内,使用初始值设定项来避免元素的不确定值:

void foo(void)
{
     bool arr[X] = {false};  // initialize all elements to `false`
}

编辑:

现在问题略有不同:

long long int x;
scanf("%lld",&x);
bool arr[x];

这意味着arr是一个可变长度数组。 VLA只能具有块作用域,因此与块作用域中的任何对象一样,这意味着数组元素具有不确定的值。您无法在申报时初始化VLA。您可以使用=运算符或使用memset函数为数组元素指定值。

答案 1 :(得分:1)

根据您的代码,在本地范围内

boolean arr[x];

本身无效。 x未经初始化使用。

仅供参考,在全局[文件]范围内,所有变量都初始化为0。在本地范围内,它们只包含垃圾,除非明确初始化。


修改

[编辑后] arr数组中的所有变量都将具有垃圾值。它位于本地范围[auto]。