1,char*和char[]的對比,先舉例
#include<stdio.h>
int main()
{
char *str1 = "hello";
char *str2 = "hello";
const char *str3 = "word";
const char *str4 = "word";
printf("str1= %p,str2=%p\n",str1,str2);
printf("str3= %p,str4=%p\n",str3,str4);
char str5[] = "nihao";
char str6[] = "nihao";
const char str7[] = "uboot";
const char str8[] = "uboot";
printf("str5= %p,str6=%p\n",str5,str6);
printf("str7= %p,str8=%p\n",str7,str8);
printf("str1 == str2 = %d\n",str1==str2);
printf("str3 == str4 = %d\n",str3==str4);
printf("str5 == str6 = %d\n",str5==str6);
printf("str7 == str8 = %d\n",str7==str8);
return 0;
}
我們把指針打印出來看看,
先理解str1,str2,str3,str4,他們是什麼?他們是數組名,也就是數組首元素的地址!”str1 == str2“本質就是比較兩個數組的地址是不是相同。上面我們說過,編譯器給他們分配了新的存儲空間來對字符串"abc"進行拷貝,這些變量在內存裏是相互獨立的,因此他們的地址肯定不同!
再理解str5,str6,str7,str8,他們是什麼?他們是指針,他們的值就是字符串常量的地址!它們都指向“abc"所在的靜態數據區,所以他們都相等。
而char*他們是指針,他們的值就是字符串常量的地址!它們都指向“abc"所在的靜態數據區,所以他們都相等。