为什么字符指针“ ==“返回true?

umop apisdn

当我们在C中比较字符串时,请小心使用strcmp(或它的其他变体)进行相等性检查。例如,如果一个字符串是,char hello1[7] = "hello!"而另一个字符串是char hello2[7] = "hello!",我们可以使用来检查它们的内容是否相等strcmp但是,==由于==会比较每个数组的第一个元素的地址(由于数组衰减),因此我们无法使用,并且始终为假。

那么为什么当我尝试与进行比较char *==,结果为真?例如:

int main() {
  char *str1 = "Hello";
  char *str2 = "Hello";

  if (str1 == str2) {
    printf("equal\n");
  } else {
    printf("not equal\n");
  }
}

这将打印equal根据我的理解,指针本质上是一个地址,所以achar *是包含字符的位置的地址。那么,两个地址在这里如何相同?

霍布斯

因为两个地址相同的。您的编译器在程序中包含字符串“ Hello”的一个副本,并制作了一个副本,str1并且str2两个副本均指向该副本

C标准指定字符串文字可能是内存中的不同数组,也可能不是,这是未定义的事情,如果您对其进行修改以允许编译器精确地执行此操作,则可能会发生未定义的事情

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章