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個字節。