學習和使用c語言近十年了但對c語言的複雜指標依然有些迷糊索性花點時間分析一下,下面是一些心得,希望對讀者有所幫助
取the c programming language中的兩個例子以分析
char (*(*x()))();
char (*(*x[3])())[5];
若直接讓我們說出這兩個x分別是什麼意思往往會有一些困難, 這裡我們可以使用代入法(暫且叫代入法)來分析
分析結果轉述原則:
左端=右端(比如下面的y=*x()中y為左端, *x()為右端)
若右端為陣列則左端可被看作右端的其中乙個元素
若右端為函式則左端可被看作右端函式的返回值
直到無巢狀為止
分析步驟:
1.取最內的元素組合作欲被代入項( 如下面的*x() )
2.對欲被代入項做分析解釋( 如對*x()進行解釋:x是乙個返回乙個指標的函式 )
3.生成新的分析語句 ( 如 char (*(y))(); )
4.精簡新生成的分析語句( 如char (*(y))();為char (*y)(); )
5.遞迴進行如上操作直到分析語句中無巢狀存在為止
6.根據分析轉述原則轉述出結果
示例分析如下:
char (*(*x()))();
令y=*x()
x為一函式此函式返回乙個指標
有如下:
char (*(y))();
即char (*y)();
其中*y為一指標陣列 其中每一項為一指標
令z = *y
則有:char (z)();
即 char z()
其中z為乙個函式該函式返回乙個字元
根據轉述原則得結果如下:
x是一函式,該函式返回乙個指標,該指標指向乙個指標陣列,該陣列的每一項為一指標,這些指標中每乙個指向乙個函式,這些被指向的函式返回乙個字元
修飾如下:
x是乙個函式,該函式返回乙個指標陣列,其中每一項指向了乙個函式,被指向的函式返回乙個字元
第二個:
char (*(*x[3])())[5];
*x[3] x為乙個指標陣列其中每一項為一指標
令y = *x[3];
得:char (*(y)())[5];
即:char (*y())[5];
*y() y為一函式該函式返回乙個指標
令: z = *y()
得:char z[5];
z是乙個含5個字元的字元陣列
根據轉述原則得出結果如下:
x是乙個指標陣列其中每一項為乙個指標, 這些指標中每項指向乙個函式, 被指向的函式返回乙個指標, 被返回的指標指向乙個含有5個字元的字元陣列
修飾如下:
x是乙個指標陣列, 其中的每一元素指向乙個返回乙個包含5個字元的字元陣列的函式
C語言 指標理解
剛剛程式設計遇到了乙個問題,如下 include struct nodetree 101 int loc node creat bool build node t,char c return true intmain return0 預期結果,我本來想達到一種效果,就是將t傳進去,然後對t做修改,返...
C語言指標的理解
什麼是指標?指標也是一種變數,存放的是某塊記憶體的位址。我們知道,記憶體可以理解為是按位元組被分割成若干塊的,每一位元組都對應著乙個編號,並且這些編號從小到大依次排列,這個編號就是它的位址,獨一無二,而指標變數中的值就是這些編號 例如如下 的結果 include include int main 這...
C語言指標的理解
include intmain int p1 2 p2 2 p3,p4,p5 宣告2個陣列指標,和3個普通指標 p1 arr 記住p1是陣列指標,是指向陣列的 printf d n p1 0 輸出陣列裡的第乙個元素 p1 指標自增,自增按陣列單位自增,這裡看成一維陣列的話,乙個陣列單位就是3,相當於...