Ahm*_*man 3 c arrays string pointers
#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));
}
Run Code Online (Sandbox Code Playgroud)
输出:
0
1
Run Code Online (Sandbox Code Playgroud)
我知道我们无法使用==
运算符比较C char数组,因为它比较了内存位置,但为什么它在第二种情况下有效呢?
在第一种情况下,当您定义了两个数组时,编译器为它们分配了两个单独的存储,因此a
并且b
不相等.
但是,对于第二种情况,当您使用相同的字符串文字初始化两个指针时,编译器会发现它们是相同的字符串,并将两个指针指向同一个地址,该地址是该字符串文字的起始地址("bar"
).
然而,作为@大卫说,这不一定发生,并且在某些情况下,删除了一些优化,或基于一些编译器,x
并且y
可能是不一样的.
归档时间: |
|
查看次数: |
611 次 |
最近记录: |