数组名在内存的存储位置
#include<stdio.h>
void main(void)
{
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char *str5 = "abc";
const char *str6 = "abc";
char *str7 = "abc";
char *str8 = "abc";
printf("%d",str1 == str2);
printf("%d", str3 == str4);
printf("%d", str5 == str6);
printf("%d", str7 == str8);
}
为什么str1 != str2
"abc"都是同一个"abc"吗?都存在静态存储区?
[解决办法]
前面4个都是分配了数组空间的,并且把字符串复制到了数组中。因为分配了4个数组空间,所以4个数组指针不会相等。
后面4个则只是将指针指向常量字符串"abc",编译程序优化后该字符串只在常量区保存了一次。所以4个指针变量里的指针都指向它,指针值当然相等。