C語言複雜指標理解

2021-06-27 18:43:47 字數 1474 閱讀 7406

學習和使用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,相當於...