c 指針char*和char[]的對比說明

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"所在的靜態數據區,所以他們都相等。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章