C指針題目理解


用變量a給出下面的定義

a) 一個整型數
b)一個指向整型數的指針( A pointer to an integer) 
c)一個指向指針的的指針,它指向的指針是指向一個整型數( A pointer to a pointer to an intege)r 
d)一個有10個整型數的數組( An array of 10 integers) 
e) 一個有10個指針的數組,該指針是指向一個整型數的。(An array of 10 pointers to integers) 
f) 一個指向有10個整型數數組的指針( A pointer to an array of 10 integers)
g) 一個指向函數的指針,該函數有一個整型參數並返回一個整型數(A pointer to a function that takes an integer as an argument and returns an integer) 
h) 一個有10個指針的數組,該指針指向一個函數,該函數有一個整型參數並返回一個整型數( An array of ten pointers to functions that take an integer argument and return an integer )




答案是
a) int a; // 一個整型數 An integer 
b) int *a; // 一個指向整型數的指針 A pointer to an integer 
c) int **a; // 一個指向指針的的指針 A pointer to a pointer to an integer 
d) int a[10]; // 一個有10個整型數的數組 An array of 10 integers 
e) int *a[10]; // 一個有10個指針的數組 An array of 10 pointers to integers 
f) int (*a)[10]; // 一個指向有10個整型數數組的指針 A pointer to an array of 10 integers 
g) int (*a)(int); // 一個指向函數的指針 A pointer to a function a that takes an integer argument and returns an integer 

h) int (*a[10])(int); // 一個有10個指針的數組,指向一個整形函數並有一個整形參數 An array of 10 pointers to functions that take an integer argument and return an integer 

採用右左開弓法,先看標識符,然後先向右看,再向左看,如此反覆。()優先級最高,會影響右左的方式和範圍

a)先看到標識符a,先向右看,沒有,向左看,int,所以a是int型

b)先看到標識符a,先向右看,沒有,向左看,*,所以a是指針,再向右看,沒有,再向左看,int,所以a是int型的指針

c)先看到標識符a,先向右看,沒有,向左看,*,所以a是指針,再向右看,沒有,再向左看,*所以指針a指向的還是一個指針,向右看,沒有,向左看,int,所以指針a指向的是一個int型的指針。

d)先看到標識符a,先向右看,[10],所以a是一個數組,再向左看,int,所以a是一個int型的數組。

難的開始了

e)先看到標識符a,先向右看,[10],所以a是一個數組,再向左看,*,所以a數組的每一個都是指針。向右看,沒有,再向左看,int,所以a是一個指針類型的數組

f)先看到標識符a,由於()將a包含,所以先在()內看,向右,沒有,向左,*,所以a是一個指針。再看外面,向右,[10],a指向的是一個數組,向左int ,所以a是一個指向int [10] 的指針

g)先看到標識符a,由於()將a包含,所以先在()內看,向右,沒有,向左,*,所以a是一個指針。再看外面,向右(int),說明指向的是一個函數,這個函數的參數是int,再向左,int,表示函數返回值是int。所以a是一個指向參數爲int,返回值爲int的函數的指針。(函數指針)

h)先看到標識符a,由於()將a包含,所以先在()內看,向右,[10],說明a是一個數組,向左,*,說明a數組每一個都是指針。再看外面,向右,(int),說明()內的指針是指向函數的,且該參數爲int,再向左,int,說明函數的返回值是int,綜上,a是一個由10個指針組成的數組,該指針指向一個參數爲int,返回值爲int的函數。


從右左開弓法可以看到,標識符a是右結合,*總是左結合,個人覺得這可以用C編譯過程中的有限自動機來理解,但暫時還未深入研究。


參考方法來自http://blog.csdn.net/hackerwin7/article/details/20064541

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章