1.指標陣列和陣列指標
int *p[4]; //定義乙個指標陣列,該陣列中每個元素是乙個指標,每個指標指向**就需要程式中後續再定義了。
int (*p)[4]; //定義乙個陣列指標,該指標指向含4個元素的一維陣列(陣列中每個元素是int型)。
區分int *p[n]; 和int (*p)[n]; 就要看運算子的優先順序了。
int p[n]; 中,運算子[ ]優先順序高,先與p結合成為乙個陣列,再由int說明這是乙個整型指標陣列。
int (*p)[n]; 中( )優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列。
對指標進行加法(減法)運算時,它前進(後退)的步長與它指向的資料型別有關,p 指向的資料型別是int [4],那麼p+1就前進 4×4 = 16 個位元組,p-1就後退 16 個位元組,這正好是陣列 a 所包含的每個一維陣列的長度。也就是說,p+1會使得指標指向二維陣列的下一行,p-1會使得指標指向陣列的上一行。
2.指標陣列和二維陣列指標的區別:
指標陣列和二維陣列指標在定義時非常相似,只是括號的位置不同:
int *(p1[5]); //指標陣列,可以去掉括號直接寫作 int *p1[5];
int (*p2)[5]; //二維陣列指標,不能去掉括號
3.c函式指標
乙個函式總是占用一段連續的記憶體區域,函式名在表示式中有時也會被轉換為該函式所在記憶體區域的首位址,這和陣列名非常類似。我們可以把函式的這個首位址(或稱入口位址)賦予乙個指標變數,使指標變數指向函式所在的記憶體區域,然後通過指標變數就可以找到並呼叫該函式。這種指標就是函式指標。
函式指標就是乙個指標,它指向了乙個函式。函式是有位址的,函式指標就可以是那個位址。函式是可以呼叫的。可以用函式的名字呼叫函式,也可以用指向這個函式的指標呼叫這個函式。
舉例:
int add (int x, int y)
可以寫如下的呼叫語句: int c = add(1, 2);
也可以寫如下的呼叫語句:
int (pf)(int x, int y); /這裡pf是函式指標的名字,同時函式指標要求與其指向的函式的引數的個數和型別,還有返回值的型別一致。*/
pf = add;
int c = pf(1, 2);
函式指標的最大作用就是可以動態的呼叫自己喜歡的函式。
例如:
int add (int x, int y)
int subtract (int x, int y)
int (*pf)(int x, int y);
int a = 5; int b=6; int c=0;
if(b>3) pf = add;
else pf = subtract;
int c = pf(a, b);
呼叫add還是subtract在程式執行時,依靠b的值決定。
總結:
指標(pointer)就是記憶體的位址,c語言允許用乙個變數來存放指標,這種變數稱為指標變數。指標變數可以存放基本型別資料的位址,也可以存放陣列、函式以及其他指標變數的位址。
常見的指標含義:
C語言 指標函式和函式指標
指標函式和函式指標 指標函式其實是乙個簡稱,是指帶指標的函式,它本質上是乙個函式,只是返回的是某種型別的指標。其定義的格式為 型別識別符號 函式名 參數列 函式指標,從本質上說是乙個指標,只是它指向的不是一般的變數,而是乙個函式。因為每個函式都有乙個入口位址,函式指標指向的就是函式的入口位址。其定義...
C語言 指標函式和函式指標
1 指標函式是指帶指標的函式,本質上是乙個函式,函式返回值是某一型別的指標 定義 型別識別符號 函式名 參數列 int f int x,int y 它首先是乙個函式,只不過這個函式的返回值是乙個位址值,函式返回值必須用同型別的指標變數來接受,也就是說,指標函式一定有函式返回值,而且,在主調函式中,函...
C語言 函式和指標
05 函式與指標 本章內容 掌握函式概念及函式應用 會應用c語言的內建函式 熟練使用c語言中的自定義函式 理解函式引數及引數的傳遞方式 理解指標的概念 基本掌握指標的用法 理解指標和陣列的關係 基本掌握指標作為函式引數的用法 一 函式機制的優點 使程式變得更簡短而清晰 有利於程式維護 可以提高程式開...