Uboot中C語言之指標陣列

2021-08-18 22:48:52 字數 2046 閱讀 2162

回顧:

1.字面意思來理解指標陣列與陣列指標

1)指標陣列的實質是乙個陣列,這個陣列中儲存的內容全部是指標變數。

2)陣列指標的實質是乙個指標,這個指標指向的是乙個陣列

2.分析指標陣列與陣列指標的表示式

1)int *p[5]; int (*p)[5];    int *(p[5]);

2)一般規律:int *p;(p是乙個指標); int p[5];(p是乙個陣列)

總結:我們在定義乙個符號時,關鍵在於:首先要搞清楚你定義的符號是誰(第一步:找核心);其次再來看誰跟核心最近、誰跟核心結合(第二步:找結合);以後繼續向外擴充套件(第三步:繼續向外結合直到整個符號完)。

3)如何核心和*結合,表示核心是指標;如果核心和結合,表示核心是陣列;如果核心和()結合,表示核心是函式。

4)用一般規律來分析3個符號:

    第乙個:int *p[5]; 核心是p,p是乙個陣列,陣列有5個元素大,陣列中的元素都是指標,指標指向的元素型別是int型別的;整個符號是乙個指標陣列。

    第二個,int (*p)[5];核心是p,p是乙個指標,指標指向乙個陣列,陣列有5個元素,陣列中存的元素是int型別; 總結一下整個符號的意義就是陣列指標。

    第三個,int *(p[5]); 解析方法和結論和第乙個相同,()在這裡是可有可無的。

下面是**部分:

typedef int (init_fnc_t) (void);

/*這裡定義了乙個新的資料型別init_fnc_t,

*這個資料型別是引數為空,返回值為int的函式。

ps:注意init_fnc_t並不是函式指標!!! 如果這樣寫就表示函式指標 typedef int (*init_fnc_t) (void);

*//*init_sequence是乙個指標陣列,陣列元素指向的是init_fnc_t型別的函式*/

//init_sequence 是乙個指標陣列(陣列元素為指標變數),指向的是init_fnc_t型別的函式組成的陣列。陣列的元素資料型別 init_fnc_t是引數為空,返回值為int的函式)

init_fnc_t *init_sequence=

我們來解析下這句話。對照int *p[5],我們知道init_sequence是乙個指標,指向乙個陣列,陣列元素是init_fnc_t型別的。

;/*init_fnc_ptr為指向函式指標的指標*/

init_fnc_t **init_fnc_ptr;

/*init_fnc_ptr初始化指向init_sequence指標陣列,下面的迴圈遇到null結束*/

for (init_fnc_ptr= init_sequence;*init_fnc_ptr;++init_fnc_ptr)

}ps:指標陣列和指向指標的指標 兩者的主要區別:

就是,指標陣列的陣列名不能進行++操作(因為陣列名僅僅代表乙個位址!是乙個常量!!),而指向指標的指標是 可以++的(因為它是乙個變數!),所以這段源**中,重新定義了乙個指向函式指標的指標init_fnc_ptr來對指標陣列 (init_sequence)進行操作. 操作也就是將各個準備初始化的函式的入口位址依次賦給init_fnc_ptr!而*init_fnc_ptr就正好對應arch_cpu_init這些 東西了,那麼(*init_fnc_ptr)()就相當於arch_cpu_init() 了.

c語言之陣列指標

在c語言裡,陣列就是指標,指標就是陣列,一維指標就是一維陣列,二維指標就是二維陣列。陣列名就是陣列的首位址,所以形參是陣列的時候,必須把陣列的個數也帶過去 陣列一般通過下標訪問,下標偏移就是位址偏移。可以把一級指標指向一維陣列的首位址。除此之外,指標比陣列更為靈活。陣列在定義的時候必須指定長度個數,...

C語言之指標陣列

指標數值是什麼,有什麼用?通俗的講,指標變數和普通變數的理解差不多,只不過是指標變數儲存的是變數的位址,而普通變數儲存的是值。指標在什麼時候會使用到 傳遞和偏移兩個環節中 使用指標應該注意的事項 使用指標之前應該對其初始化 初始化已經宣告的位址 指標不能賦值具體值 指標所代表的是位址,而不是具體值 ...

C語言之指標陣列

一.指標陣列 1.簡介 簡介 本質是乙個陣列,但是裡面存放的資料都是指標,即陣列元素都是指標。它是 儲存指標的陣列 的簡稱。2.內容格式 資料型別 陣列名 元素個數 例如 int a 4 的優先順序比我們的 的優先順序高,所以與我們的4先結合,形成了我們的陣列的定義,陣列名叫做a,我們平時定義陣列的...