我最近面临一行代码和四个选项:
char fullName[30] = {NULL};
A) First element is assigned a NULL character.
B) Every element of the array is assigned 0 ( Zeroes )
C) Every element of the array is assigned NULL
D) The array is empty.
我们选择的答案是选项 C,因为数组只用一个
NULL
初始化。 , C++ 用 NULL
填充数组的其余部分.然而,我们的教授不同意,说答案是A,他说:
So the very first element is
NULL
, and when you display it, it's displaying the first element, which isNULL
.
引文完整地显示了问题;没有提供其他信息。我很好奇哪个是正确的,如果有人能解释为什么所说的答案是正确的。
最佳答案
这个问题定义不明确,但选项 B 似乎是最正确的答案。
结果取决于 NULL
的准确程度已定义,其中 depends on the compiler (更准确地说,在标准库实现上)。如果定义为 nullptr
,代码将无法编译。 (我认为没有任何主要的实现会这样做,但仍然如此。)
假设 NULL
未定义为 nullptr
,那么它必须被定义为一个值为 0
的整数文字(即 0
或 0L
或类似的东西),这使您的代码等效于 char fullName[30] = {0};
.
这将用零填充数组,因此选项 B 是正确答案。
通常,当您使用花括号括起来的列表初始化数组时,每个元素都会被初始化。如果您提供的初始值设定项少于元素数量,则其余元素将归零。
关于其余选项:
NULL
相当于 0
,因此可以认为选项 C 等效于选项 B。关于c++ - 字符数组初始化,第一个元素为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61718622/