我尝试了下面给出的代码,发现它实际上打印了“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正在运行。
| 归档时间: |
|
| 查看次数: |
247 次 |
| 最近记录: |