Code 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;
}
现在在第一个代码中,字符数组变为 const。在第一个代码中,我得到了 False 作为选择。在第二个代码中,它是真的。提前致谢
==
不比较字符串内容。
在第一个代码段中st1
是具有自动存储持续时间的st2
char[6]
类型,您可以修改字符串内容。使用==
时,这些类型会衰减到char*
。它们的地址必须不同,因此==
会产生false
。
在第二个代码段中,字符串文字是只读的,在 C 中,它们仍然是形式char[6]
的(参见C++它们是const char[6]
类型(,尽管尝试修改内容的行为是未定义的。对它们使用const char*
类型是完全可以接受和合理的。由于内容是只读的,因此编译器可能使用相同的字符串,因此st1
和st2
可能指向内存中的相同位置。在您的情况下,这种情况正在发生,==
的结果是true
.
第二个是正确的,因为您使用的是优化编译器。由于str1
和str2
是指针,因此使它们指向同一字符串,从而节省了一点内存。
C 和 C++ 的答案完全错误。请投票删除。