让我们来看一下变量char *s
;
我知道如果它在全局范围内声明,它的值应该是0;
如果它在本地范围内声明,它的值是未定义的(尽管它可能是0)。
我在测试中遇到了一个问题,听起来像这样“定义为指针的值将是什么:
char* s
a) null
b) 空字符串
c) undefined
我非常困惑应该选择哪个答案,因为如果它在全局作用域中声明,那么值将为null(我猜)。如果它在局部作用域中声明,则为undefined(尽管当我尝试时为零),并且当我尝试使用cout
时,没有任何内容被打印出来(没有分段错误,为什么?),这意味着它是一个空字符串(或者是cout
太棒了?)。
NULL
。 - NirMHcout << (void *) s
,否则它将尝试打印s
指向的以空字符结尾的字符串,这是您不想要的。但我认为您比提出问题的人更理解这一点。 - Alan Stokes=&n;
或者= malloc(20);
,这将改变一切。但是,抛开这个不说,具有自动存储期限且未被明确初始化的指针的值是不确定的,而不是未定义的,所以(c)不符合要求。指针的值永远不可能是“空字符串”,所以(b)也不对。只剩下(a)了,只有它才能是唯一正确的答案,前提是你愿意将"null"等同于"空指针"。 - Crowmanchar
的指针的“默认值”,并且提到正在尝试使用cout
输出它,则显然s
是在不同的翻译单元中以外部链接方式定义的文件作用域变量,因此您可以完全排除自动存储期。 - Crowmancout
。除非你想要对cout
进行左移操作,也许应该将标题改为“C++”,并且去掉“C”标签。 - M.M