C++默认初始化 根据Stanley Lipmann的C++入门版第四版,第50页上说:

C++默认初始化 根据Stanley Lipmann的C++入门版第四版,第50页上说:,c++,C++,在任何函数体外部定义的变量初始化为0 根据我读到的,这似乎不是真的 全局字符默认为空,而不是0 非常感谢您的帮助。'0'不是0。当其状态初始化为0时,表示值0也是\0或NULL,而不是ASCII编码中48的字符“0”。'0'不是0。当状态初始化为0时,表示值0也是\0或NULL,而不是ASCII编码中48的字符“0”。Stanley是正确的-具有静态存储持续时间的对象在进行任何其他初始化之前初始化为零 因此,在您的术语中,全局字符默认为0。这是整数0,而不是通常为48的字符“0”。当您尝试将其流

在任何函数体外部定义的变量初始化为0

根据我读到的,这似乎不是真的

全局字符默认为空,而不是0

非常感谢您的帮助。

'0'不是0。当其状态初始化为0时,表示值0也是\0或NULL,而不是ASCII编码中48的字符“0”。

'0'不是0。当状态初始化为0时,表示值0也是\0或NULL,而不是ASCII编码中48的字符“0”。

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

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

如果您指的是全局字符*或字符常量*,那么它也默认为0,即它将是一个空指针。这与指向空字符串的指针不同。尝试流式传输将导致未定义的行为,因此你看不到任何东西,或者你可以在ASCII艺术翻译层后面看到我妈妈的番茄汤配方,以20Hz的解释性舞蹈形式呈现

两者都不会是空白的,虽然我不知道空白在这里的意思,但我不能绝对肯定地说。

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

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

如果您指的是全局字符*或字符常量*,那么它也默认为0,即它将是一个空指针。这与指向空字符串的指针不同。尝试流式传输将导致未定义的行为,因此你看不到任何东西,或者你可以在ASCII艺术翻译层后面看到我妈妈的番茄汤配方,以20Hz的解释性舞蹈形式呈现

两者都不是空白的,虽然我不知道空白在这里的意思,但我不能绝对肯定地说。

试试这个:

#include <iostream>
char global;

int main()
{
    std::cout << "Value of Global " << ((int)global) << "\n";
}
这里是一个静态存储持续时间对象,因此将初始化为零。 我非常懒洋洋地将其转换为整数,以便流将打印出其值,而不是仅显示为零的字符

打印出字符“\0”不会打印任何有用的内容

试试这个:

#include <iostream>
char global;

int main()
{
    std::cout << "Value of Global " << ((int)global) << "\n";
}
这里是一个静态存储持续时间对象,因此将初始化为零。 我非常懒洋洋地将其转换为整数,以便流将打印出其值,而不是仅显示为零的字符


打印出字符“\0”不会打印任何有用的内容

“0”没有字符代码0。字符代码0至少在ASCII中是空的,不确定是否有任何东西偏离。你是说,全局字符默认为空白?@ LexNeasraceSin轨道,当他打印出未初始化的字符变量时,它就变为空白。AFAIK 0需要是NUL终止符。C++中没有空白。“0”没有字符代码0。字符代码0至少在ASCII中为空,不确定是否有任何东西偏离了。你是说,全局字符默认为空白?@ LexNeasraceSin轨道,当他打印出未初始化的字符变量时,它就变为空白。AFAIK 0需要是NUL终止符。C++中没有空白。打印字符'\'是未定义的行为,除非流是在二进制模式下打开的,而std::cout不是这种情况。打印字符“\-”是未定义的行为,除非流是在二进制模式下打开的,而std::cout不是这种情况。