为什么if语句将字符数组处理为true?

Ary*_*ola 4 c c++

我尝试了下面给出的代码,发现它实际上打印了“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.


Bat*_*eba 6

"string"实际上是const char[7]C++ 中的文字和char[7]C 中的常量。请注意,在 C++ 中,您不能将其分配给 a char[6],因为您必须为 NUL 终止符提供空间。不过你可以在 C 中省略它。

a 衰减为类型的指针char*

在任何一种语言中,该指针值都不能为 0 或隐式转换为false。因此,主体if正在运行。