为什么第一个代码输出在第二个代码中是假的和真的



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*类型是完全可以接受和合理的。由于内容是只读的,因此编译器可能使用相同的字符串,因此st1st2可能指向内存中的相同位置。在您的情况下,这种情况正在发生,==的结果是true.

第二个是正确的,因为您使用的是优化编译器。由于str1str2是指针,因此使它们指向同一字符串,从而节省了一点内存。

C 和 C++ 的答案完全错误。请投票删除。

最新更新