1

根据 Stanley Lipmann 的 C++ Primer(第 4 版),第 50 页上说:

“在任何函数体之外定义的变量都被初始化为 0。”

根据我阅读的内容,这似乎不是真的。

全局char默认为空白而不是 0。

将不胜感激任何帮助。

4

3 回答 3

9

Stanley 是正确的 -具有静态存储持续时间的对象在任何其他初始化发生之前被初始化为零

因此,在您的术语中,全局“默认”char 0. 这是整数0,而不是字符'0'(通常是48)。当您尝试将其流式传输到控制台时,您将看不到任何内容,因为此char值没有人类可读的表示。

如果您的意思是全局char*or char const*,那么这也“默认”为0,即它将是一个空指针。这指向空字符串的指针不同。尝试流式传输这将导致未定义的行为,因此您什么也看不到,或者您可以看到我妈妈的番茄汤食谱以 20Hz 的解释性舞蹈形式呈现在 ASCII 艺术翻译层后面。

两者都不会是“空白”,尽管不知道“空白”在这里意味着什么,我不能绝对肯定地说。

于 2012-12-22T20:11:01.140 回答
6

尝试这个:

#include <iostream>
char global;

int main()
{
    std::cout << "Value of Global " << ((int)global) << "\n";
}

global这是一个静态存储持续时间对象,因此将被零初始化。
我将它(非常懒惰地)转换为一个整数,以便流将打印出它的值(而不是字符),只是为了表明它为零。

打印出 char '\0' 不会打印任何有用的东西。

于 2012-12-22T20:15:51.623 回答
3

'0'不是0。当它状态初始化为 0时,它表示值0(也是\0or NULL),而不是字符'0'(在 ASCII 编码中为 48)。

于 2012-12-22T20:10:32.560 回答