C - 与==有效的数组比较,为什么?

时间:2015-06-17 06:56:27

标签: c arrays comparison

我有点困惑。我有以下功能:

int comp(char s1[], char s2[]) {
   return s1 == s2;
}

据我所知,这只比较了char数组s1和char数组s2中第一个元素的地址。

但奇怪的是,如果我比较(在Visual Studio中)两个相同的char数组,如

 comp("test","test");

我得到1(真)而不是0(假)。但是,如果地址没有不同,因此结果应始终为0?

4 个答案:

答案 0 :(得分:7)

我想这是使用相同字符串实例进行编译器优化的结果。如果您做了类似的事情,那么您将证明==不能按照您的建议行事:

char s1[10];
char s2[10];
strcpy(s1, "test");
strcpy(s2, "test");
printf("%d\n", comp(s1, s2));

答案 1 :(得分:4)

之所以如此,是因为在编译期间,相同的字符串在字符串池中存储为一个字符串。因此,两者都指向相同的地址,因为字符串池中只有一个“test”字符串。 Memory heap

答案 2 :(得分:3)

字符串文字通常通过优化编译器来重用,因此如果您使用相同的字符串文字两次,则两者都将是完全相同的字符串文字。你的函数正在比较指针,并且因为两个字符串文字是相同的,所以你要比较相同的指针,这当然会给你一个" true"值。

答案 3 :(得分:0)

了解mutabe和immutable string的概念。比较时存储在堆栈中的字符串返回true,但如果堆中的另一个字符串堆栈中的另一个字符串则返回false。

第二个问题是,你使用prpredefined函数比较2字符串然后函数如下工作

比较(s1,s2)返回正零或负数,如s1所示,等于或跟随s2在字典顺序中基于非自杀角色。

问候。