gpt4 book ai didi

c - 为什么第一个代码输出为假,而第二个代码输出为真?

转载 作者:行者123 更新时间:2023-11-30 21:47:15 25 4
gpt4 key购买 nike

代码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。在第二个代码中,这是真的。提前致谢

最佳答案

== 是否比较字符串内容。

第一个片段中的st1st2char[6]类型,具有自动存储期限,并且允许修改字符串内容。当使用 == 时,这些类型衰减char*。它们的地址必须不同,因此 == 将产生 false

在第二个片段中,字符串文字是只读,在 C 中它们仍然是形式上的 char[6](参见 C++,其中它们是 const char[6] 类型),尽管尝试修改内容的行为是未定义。对它们使用 const char* 类型是完全可以接受和合理的。由于内容是只读的,编译器可能使用相同的字符串,因此st1st2可能指向内存中的同一位置。在您的情况下,这种情况正在发生,并且 == 的结果是 true

关于c - 为什么第一个代码输出为假,而第二个代码输出为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48622935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com