C中指向char的指针的默认值

cli*_*oot 9 c c++ pointers

让我们有变量 char *s;

我知道如果它在全局范围内声明,它的值应为0;

如果它在本地范围内声明,则其值未定义(尽管可能为0).

我在测试中有一个问题听起来像'定义为指针的值是什么

char* s
Run Code Online (Sandbox Code Playgroud)

a)null
b)空字符串
c)未定义

我真的很困惑我应该选择什么答案,因为如果它在全局范围内声明,那么该值将为null(我猜).如果它在本地范围内声明,未定义(虽然当我尝试它为零时),当我尝试cout它时,没有打印任何内容(没有分段错误,为什么?),这意味着它是一个空字符串(或者是cout那么棒?).

AnT*_*AnT 20

你引用的问题很可能是由一个不完全理解这个问题的人写的.正如您所正确指出的,这种指针的初始值很大程度上取决于上下文:在何处以及如何定义它(本地,静态,聚合成员?).因此,正确答案应该是一个解释这些依赖关系的扩展答案.尝试以"多种选择,只有众多"方式回答这样的问题是很奇怪的.

当然,在非常一般和最正式的迂腐意义上,正确答案是说"未定义"的答案,因为在一般情况下,不知道它的定义在哪里,我们必须"假设最坏的".但我怀疑测试的作者意识到了这一点.