我尝试了下面给出的代码,发现它实际上打印了“yes”,这意味着在 if 语句中字符数组被视为 true。但我想知道是什么原因。我的意思是它是一个数组,所以它返回了整个“字符串”。或者它返回它的第一个元素“s”,或者它返回它的内存位置,该位置被处理为 true,就像 0 以外的任何值都是 true 一样。
char a[] = "string";
if (a)
{
printf("yes");
}
Run Code Online (Sandbox Code Playgroud)
Sam*_*hik 11
if (a)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,对数组的引用会衰减为指向数组第一个值的指针。a
如果作为函数参数传递,也会发生同样的事情。
所以,这里a
只是一个指针。由于它不是空指针,因此其计算结果始终为 true。
char a[6] = "string";
Run Code Online (Sandbox Code Playgroud)
这并不是真正相关,但顺便说一句,这个文字字符串有七个字符,而不是六个。你忘了尾随\0
.
"string"
实际上是const char[7]
C++ 中的文字和char[7]
C 中的常量。请注意,在 C++ 中,您不能将其分配给 a char[6]
,因为您必须为 NUL 终止符提供空间。不过你可以在 C 中省略它。
a
衰减为类型的指针char*
。
在任何一种语言中,该指针值都不能为 0 或隐式转换为false
。因此,主体if
正在运行。