type *name[] 在函數參數裏面聲明和不在函數裏面聲明其實不同。html
type *name[] 若是在函數參數裏聲明,則name 是一個二維指針,並非一個指針數組,而若是不在函數參數裏聲明,則是一個指針數組。數組
這能夠經過sizeof 來確認。函數
void func(char *name[]) { printf("%d\n", sizeof(name); } char *str[] = {" we", "are", "good\n"}; func(str); // 輸出4
輸出結果爲4,從而能夠知道name 一個指針,而不是數組,否則爲何sizeof 的結果不是指針數組的大小,也就是12( 4 *3)。spa
下圖是個人理解示意圖指針
二維指針與二維數組不同,可是二維指針能夠使用和二維數組同樣的訪問形式,即name[i][j]。htm
int *num[3] = { 1, 3, 5}; *num++;// error void func(int *num[]) { *num++;// no error; }
不能對數組名進行自增,由於數組名標誌數組的開始地址,可是能夠對二維指針進行自增,由於二維指針是一個指針變量。blog
原文地址get