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

exp*_*rer 0 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.
Run Code Online (Sandbox Code Playgroud)

的所有元素的默认值是arr[x]多少?它是false 永远?或者true?或者任何随机值?

oua*_*uah 5

没有命名的类型boolean在C,但有_Boolstdbool.hbool是扩展到_Bool

#include <stdbool.h>

#define X 42
bool arr[X];
Run Code Online (Sandbox Code Playgroud)

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

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

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

编辑:

现在的问题略有不同:

long long int x;
scanf("%lld",&x);
bool arr[x];
Run Code Online (Sandbox Code Playgroud)

这意味着arr是一个可变长度的数组。VLA 只能有块作用域,所以就像块作用域中的任何对象一样,它意味着数组元素具有不确定的值。您不能在声明时初始化 VLA。例如,您可以使用=运算符或使用memset函数为数组元素赋值。