代码1
<小时/>#include<stdio.h>
int main(){
const char st1[]={"Hello"};
const char st2[]={"Hello"};
if(st1==st2){
printf("True");
}
else{
printf("False");
}
return 0;
}
代码2
<小时/>int main(){
const char *st1="Hello";
const char *st2="Hello";
if(st1==st2){
printf("True");
}
else{
printf("False");
}
return 0;
}
现在在第一个代码中,char 数组变为 const。 在第一个代码中,我得到 False 作为 optput。 在第二个代码中,这是真的。 提前致谢
最佳答案
==
是否不比较字符串内容。
第一个片段中的st1
是st2
char[6]
类型,具有自动存储期限,并且允许修改字符串内容。当使用 ==
时,这些类型衰减为 char*
。它们的地址必须不同,因此 ==
将产生 false
。
在第二个片段中,字符串文字是只读,在 C 中它们仍然是形式上的 char[6]
(参见 C++,其中它们是 const char[6]
类型),尽管尝试修改内容的行为是未定义。对它们使用 const char* 类型是完全可以接受和合理的。由于内容是只读的,编译器可能使用相同的字符串,因此st1
和st2
可能指向内存中的同一位置。在您的情况下,这种情况正在发生,并且 ==
的结果是 true
。
关于c - 为什么第一个代码输出为假,而第二个代码输出为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48622935/