【发布时间】:2017-11-17 03:04:58
【问题描述】:
#include <stdio.h>
int main(){
char a[] = "bar";
char b[] = "bar";
printf("%d\n", (a==b));
char* x = "bar";
char* y = "bar";
printf("%d\n", (x==y));
}
输出:
0
1
我知道我们不能使用 == 运算符比较 C 字符数组,因为它比较内存位置,但为什么它在第二种情况下有效?
【问题讨论】:
-
它适用于 first 的情况,因为编译器将两个
"bar"字符串文字识别为相同,并决定通过共享存储来节省空间,并拥有a和b都指向它。不过,我不知道为什么在x和y的情况下它也没有这样做。