为什么在 C 中可以使用“<=”、“>=”、“>”、“<”将字符串与字符串或数字进行比较,它给出了什么?
#include <stdio.h>
int main()
{
char c[5] = "tests";
printf("%i", c <= "12345"); // 1
}
为什么在 C 中可以使用“<=”、“>=”、“>”、“<”将字符串与字符串或数字进行比较,它给出了什么?
#include <stdio.h>
int main()
{
char c[5] = "tests";
printf("%i", c <= "12345"); // 1
}
这个问题让我觉得非常有趣。一方面,关于语言的基本操作之一的问题。并给出了一个简单的说明性例子。另一方面,这个例子使用了一大堆隐含的规则。此外,规则,对其执行的控制委托给程序员,违反规则可能导致程序完全接缝。
正如评论中所指出的,在这种情况下(以及在其他算术运算的情况下),数组(它是 C 风格的字符串)被隐式转换为指向其第一个元素的指针,然后比较这两个指针。但是,这里还有一个细微差别 - C 允许仅将指向数组元素的指针与指向同一数组的其他元素的指针以及指向可能位于数组中最后一个元素之后的虚拟元素的指针进行比较。在所有其他情况下,行为是未定义的。
至于将字符串/数组与数字进行比较,C 中根本没有定义这样的操作。仅在 3 种情况下允许比较:
尽管编译器几乎毫无异议地编译了一个类似的示例: