指針和數組的那些難分難解問題

int _tmain()
{
    int x = 20;

int ia[10]; int (*pi)[10]; int *a[10]; //a是一個數組,數組中的每一個元素都是int * 類型的指針 int **arr[10]; //arr是一個數組,數組中的每一個元素都是int ** 類型的指針 int (**def)[10]; //def是一個二級指針,指向一個一維數組,數組中的每一個元素都是int。 int *(*gh)[10]; //gh是一個指針,指向一個一維數組,數組中的元素都是int * int (*f[10])(); //f是一個數組,含有10個元素,每一個元素都是函數指針(參數爲無,返回值爲int) int *((*b)[10]); //b是一個指針,指針指向一個一維數組,每一個元素都是一個int *類型的指針 int (*fun)(int); //fun是一個函數指針,參數爲int 返回值爲int int (*(*F)(int,int))(int); //F是一個函數指針,參數爲int,int,返回值爲一個函數指針,這個函數指針的參數爲int,返回值爲int /*首先來分解這些定義究竟是什麼意思。
int ia[10]是個簡單的數組,數組中的每一個元素都是int型整數,
int *a[10]是個數組,數組中每一個元素都事int型指針,
int (*pi)[10]是個指針,這個指針指向一個一維數組,數組中的每一個元素都是int型整數。
至於這些都是怎麼判斷出來的呢,其實裏面有個規律,首先找到定義的變量名,而後從變量向右看,如int *a[10]首先找到變量名稱 ‘a',而後看向 a 的右邊是 [10],那麼能夠得出 a 是一個數組且
數組中有10個元素,而後再從變量往左看,a 的左邊是 int *,那麼贊成能夠獲得 a 數組中的元素類型都爲int *,也就是都是int型指針,至此,能夠得出結論,a是一個一維數組,數組中的每一個元素
都是一個int型的指針。

根據這個規律,一條一條來分析上面定義的各變量:
int **arr[10];    首先找到變量名arr,而後看右邊[10],肯定arr是個數組,再看左邊int **,肯定數組中的元素都是int **型的二級指針。
int (**def)[10];   首先找到變量def,而後看右邊是個括號,括號優先級大於[],因此先看括號裏面的(**def),首先找到括號中的變量def,而後看右邊,右邊沒有內容,再看左邊**,肯定def是個二級指針,而後再看括號外面,先看右邊[10],是個數組,再看左邊 int,肯定
            def是一個二級指針,最終指向的是一個一維數組,數組中的元素都是int型
int *(*gh)[10];   首先找到變量gh,gh在括號中,先看括號內的(*gh),gh右邊沒有內容,再看左邊*,肯定gh是個指針,再看括號外面,右邊是[10],肯定指針指向的是個數組,再看左邊int *,肯定數組中的元素都是int型的指針
int (*f[10])();   首先判斷這個定義是一個函數指針的申明,先找到變量f,發現f在括號(*f[10])中,那先判斷括號中的內容,先找變量f,再看右邊是[10],肯定是個數組,再看左邊*,肯定數組中的元素都是指針,再看全局,能夠肯定每一個元素都是一個函數指針,這個函數指針
             的參數是無類型,返回值是int型。
到這來咱們就會判斷這些定義到底定義的是些什麼內容了,那接下來的sizeof就好辦了。

int len = 0; len = sizeof a;           //a是數組,長度就是 sizeof(int)*10 = 40
len
= sizeof arr; //arr是數組,數組元素都是指針, sizeof(p)*10 = 40, (p表明指針,通常指針的大小都是4字節) len = sizeof def; //def是指針,指針是大小是 4
len
= sizeof gh;            //gh是指針,指針長度爲4 len = sizeof f;            //f是數組,數組元素是指針,4*10=40

len
= sizeof b; len = sizeof fun; len = sizeof F; gh = &a; b = &a; for (int i=0;i<10;i++) { ia[i] = i+20; a[i] = new int[10]; *a[i] = i; arr[i] = &a[i]; } pi = &ia; def = &pi; (*(*def))[3] = 21; *((*gh)[1]) = 133; *((*gh)[2]) = 13; return 0; }
相關文章
相關標籤/搜索