我有点困惑。我有以下功能:
int comp(char s1[], char s2[]) {
return s1 == s2;
}
据我所知,这只比较了char数组s1
和char数组s2
中第一个元素的地址。
但奇怪的是,如果我比较(在Visual Studio中)两个相同的char数组,如
comp("test","test");
我得到1(真)而不是0(假)。但是,如果地址没有不同,因此结果应始终为0?
答案 0 :(得分:7)
我想这是使用相同字符串实例进行编译器优化的结果。如果您做了类似的事情,那么您将证明==
不能按照您的建议行事:
char s1[10];
char s2[10];
strcpy(s1, "test");
strcpy(s2, "test");
printf("%d\n", comp(s1, s2));
答案 1 :(得分:4)
之所以如此,是因为在编译期间,相同的字符串在字符串池中存储为一个字符串。因此,两者都指向相同的地址,因为字符串池中只有一个“test”字符串。
答案 2 :(得分:3)
字符串文字通常通过优化编译器来重用,因此如果您使用相同的字符串文字两次,则两者都将是完全相同的字符串文字。你的函数正在比较指针,并且因为两个字符串文字是相同的,所以你要比较相同的指针,这当然会给你一个" true"值。
答案 3 :(得分:0)
了解mutabe和immutable string的概念。比较时存储在堆栈中的字符串返回true,但如果堆中的另一个字符串堆栈中的另一个字符串则返回false。
第二个问题是,你使用prpredefined函数比较2字符串然后函数如下工作
比较(s1,s2)返回正零或负数,如s1所示,等于或跟随s2在字典顺序中基于非自杀角色。
问候。