C語言裏的指針探析——type *name[] 在函數參數裏面,是一個二維指針

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

相關文章
相關標籤/搜索