C 中未初始化的布尔数组的默认值是多少?
What is the default value of an uninitialized boolean array, in C?
我有类似的东西,
#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
?或者任何随机值?
根据您的代码,在本地范围内
boolean arr[x];
本身无效。 x
未初始化使用。
仅供参考,在全局 [file] 范围内,所有变量都被初始化为 0
。在本地范围内,它们只包含垃圾,除非明确初始化。
编辑:
[编辑后] arr
数组中的所有变量都将具有垃圾值。它在局部范围内 [auto].
C 中没有名为 boolean
的类型,但有 _Bool
,在 stdbool.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
函数。
我有类似的东西,
#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
?或者任何随机值?
根据您的代码,在本地范围内
boolean arr[x];
本身无效。 x
未初始化使用。
仅供参考,在全局 [file] 范围内,所有变量都被初始化为 0
。在本地范围内,它们只包含垃圾,除非明确初始化。
编辑:
[编辑后] arr
数组中的所有变量都将具有垃圾值。它在局部范围内 [auto].
C 中没有名为 boolean
的类型,但有 _Bool
,在 stdbool.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
函数。