數組名退化問題

char szString[20];

memset(szString,0x0,sizeof(szString));

memset(&szString,0x0,sizeof(szString));

 

我一開始覺得不可能,但把szString&szString的地址打印出來有確實相同。最後在C FAQ上找到了答案,在C語言中的大多數表達式中,數組名都會退化爲一個指向數組首元素的指針,但有3個例外:

1)作爲sizeof的參數的時候。

2)作爲&的操作數的時候。

3)用字符串常量初始化的字符串數組。

 

雖然szString&szString的地址相同,但它們還是有一些不同的,szString是指向char的指針,而&szString是指向char[20]的指針,這點可以從&szString+1的地址和szString+1的地址看出,他們相差19個字節。

發佈了46 篇原創文章 · 獲贊 4 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章