【问题标题】:char array initialized at the time of declaration?char 数组在声明时初始化?
【发布时间】:2016-09-26 08:43:32
【问题描述】:

MWE 是

#include <iostream>
using namespace std;

int main(void)
{
    char array[255];
    cout << array[0] << "\n";
    cout << array[1] << "\n";
    cout << array[2] << "\n";
    cout << array[200] << "\n";
    cout << array[253] << "\n";
    cout << array[255] << "\n";
    return 0;
}

输出是

\330
^M
`
\215
^@
^@

虽然我不知道为什么输出会创建这个。但我能说 “数组在声明时初始化。”?

【问题讨论】:

  • 没有。这里没有初始化。 (因此您的程序具有未定义的行为。或者可能未指定。)
  • 也许你的意思是char array[256] = {0};
  • @Ultimater,不,只是字符数组[255];

标签: c++ arrays char initialization


【解决方案1】:

您的数组未初始化,因此它只有未定义的值。你可以先初始化你的数组:

char array[255] = {};

但这只是用 0 填充它。另外,请注意,您无法在此处访问索引 255:

cout << array[255] << "\n";

这将尝试访问数组的第 256 个元素,而您只有 255 个。

【讨论】:

  • 你可以用这种方式初始化数组,但随后一堆\0' 字符将被发送到cout,因为数组没有被其他任何东西填充。
  • 是的,但至少行为是明确定义的。
【解决方案2】:

c++ 中没有隐式初始化。 在您的情况下,编译器仅在堆栈上分配 255 个字节。实际内容是任意的。

【讨论】:

  • 有隐式初始化,只是在这种特殊情况下没有。例如,如果这个数组是在命名空间范围内定义的,它将被清零。
猜你喜欢
  • 2011-03-06
  • 2021-04-15
  • 2012-07-18
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多