c++ - 字符数组初始化,第一个元素为空

标签 c++ arrays null initialization

我最近面临一行代码和四个选项:

char fullName[30] = {NULL};
  1. A) First element is assigned a NULL character.

  2. B) Every element of the array is assigned 0 ( Zeroes )

  3. C) Every element of the array is assigned NULL

  4. 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 is NULL.



引文完整地显示了问题;没有提供其他信息。我很好奇哪个是正确的,如果有人能解释为什么所说的答案是正确的。

最佳答案

这个问题定义不明确,但选项 B 似乎是最正确的答案。

结果取决于 NULL 的准确程度已定义,其中 depends on the compiler (更准确地说,在标准库实现上)。如果定义为 nullptr ,代码将无法编译。 (我认为没有任何主要的实现会这样做,但仍然如此。)

假设 NULL未定义为 nullptr ,那么它必须被定义为一个值为 0 的整数文字(即 00L 或类似的东西),这使您的代码等效于 char fullName[30] = {0}; .

这将用零填充数组,因此选项 B 是正确答案。

通常,当您使用花括号括起来的列表初始化数组时,每个元素都会被初始化。如果您提供的初始值设定项少于元素数量,则其余元素将归零。

关于其余选项:

  • 选项 C 不清楚,因为如果代码编译成功,那么 NULL相当于 0 ,因此可以认为选项 C 等效于选项 B。
  • 选项 A 是否有效取决于您如何解释它。如果这意味着其余元素未初始化,那么它是错误的。如果它没有指定剩余元素会发生什么,那么它就是一个有效的答案。
  • 选项 D 完全错误,因为数组不能为“空”。
  • 关于c++ - 字符数组初始化,第一个元素为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61718622/

    相关文章:

    arrays - 在mips中初始化数组时显示错误

    arrays - sails.js Waterline 保存、读取、解析列表或数组

    MySQL:唯一,但默认为 NULL - 通过创建表允许。允许插入 1 个以上的 NULL。为什么?

    c++ - Microsoft Visual Studio 中的光标

    c++ - 为什么要明确 move 转发引用?

    c++ - 如何在 Windows 公用文件对话框中显示 API 填充的虚拟文件夹

    arrays - 检查方阵是否满秩的最有效方法

    null - Elixir:nil 是什么意思

    sql - MySql 复合键和空值

    c++ - 网页抓取选项 - 仅限 C++ 版本