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

标签 c

代码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/

相关文章:

c - 如何用STM32正确实现按键组合?

c - 将子进程数共享给父进程。 Exit() 和 Wait() 或全局变量

c - 为什么数字 51444.325061 不四舍五入到 51444.325 到小数点后 3 位?我想在c编程中四舍五入这个数字

c - 在 C11 或 C99 中将 float 转换为有符号整数时的饱和行为?

c++ - C++17是基于C17的吗?

c - Fisher-Yates shuffle 的这个 C 实现是否正确?

Python ctypes 生成器

c - 该代码做什么?

c - C 中的通用哈希表

c - 如何在c中重复读取文件的同一行?