接下來我只講指標的最常見用法,比如這一章的內容----返回指標的函式與指向函式的指標
指標也是c語言中的一種資料型別,因此乙個函式的返回值肯定可以是指標型別的。
返回指標的函式的一般形式為:型別名 * 函式名(引數列表) eg:char * upper(引數){} 返回指向char型的指標變數
比如下面這個函式,返回乙個指向char型別變數的指標
1 // 需求:將字串str中的小寫字母變成大寫字母,並返回改變後的字串裡面的**我就不詳細解釋了,重點看第2行的定義形式。2 // 注意的是:這裡的引數要傳字串變數,不能傳字串常量
3 char * upper(char *str)
14
15 // 遍歷下乙個字元
16 str++;
17 }
18
19 // 返回字串
20 return dest;
21 }
呼叫這個函式也非常簡單:
int main()輸出結果:
看到這個標題,你可能覺得很詫異,指標竟然可以指向乙個函式,那我就先解釋一下為什麼指標可以指向乙個函式?
函式作為一段程式,在記憶體中也要佔據部分儲存空間,它也有乙個起始位址,即函式的入口位址。函式有自己的位址,那就好辦了,我們的指標變數就是用來儲存位址的。因此,可以利用乙個指標指向乙個函式。其中,函式名就代表著函式的位址。
定義的一般形式:函式的返回值型別 (*指標變數名)(形式引數1, 形式引數2, ...);
注意:形式引數的變數名可以省略,甚至整個形式引數列表都可以省略
1 #include 2* 第10行定義了乙個指向sum函式的指標變數p。p的定義形式為:int (*p)(int a, int b),第1個int代表sum函式的返回值是int型別,然後*p是用括號()包住的,後面的int a和int b代表著sum函式的形參,其實完全可以省略。第10行、11行、12行都是可行3 int sum(int a, int b)
6 7 int main()
8
* 在第15行,先利用*p取出指向的函式,再傳入引數呼叫函式。也可以採用第16行中的做法,這樣就跟呼叫普通函式沒什麼區別
最後的輸出結果:
,毫無意外
2> 返回指標的函式的定義char *upper(char *str) 和 指向函式的指標的定義int (*p)(int a, int b)非常相似,使用時特別注意區分
3> 指向函式的指標變數主要有兩個用途:
1 #include 2如果以後想再增加一種乘法運算,非常簡單,根本不用修改counting函式的**,只需要再增加乙個乘法運算的函式3 // 減法運算
4 int minus(int a, int b)
7 8 // 加法運算
9 int sum(int a, int b)
12 13 // 這個counting函式是用來做a和b之間的計算,至於做加法還是減法運算,由函式的第1個引數決定
14 void counting( int (*p)(int, int) , int a, int b)
18 19 int main()
20
int mul(int a, int b)然後counting(mul, 6, 4);就可以進行乘法運算了
指向函式的指標 返回指標的函式
1.函式指標表示指向某一函式的指標,如下所示,int add int,int int pf int,int pf add 注意,因為函式add有兩個引數,所以pf指標也必須有兩個引數 且函式add的兩個引數均為int型,所以pf的兩個引數也必須與之匹配。如下例,include stdio.h inc...
返回指標的函式 指向函式的指標
接下來我只講指標的最常見用法,比如這一章的內容 返回指標的函式 與 指向函式的指標 指標也是c語言中的一種資料型別,因此乙個函式的返回值肯定可以是指標型別的。返回指標的函式的一般形式為 型別名 函式名 引數列表 eg char upper 引數 返回指向char型的指標變數 比如下面這個函式,返回乙...
指向函式的指標 和 返回指標的函式
1 函式指標 char pfun int 定義乙個指向函式的函式指標pfun,指向的函式引數是int型 返回值是char型 char g1fun int a 定義了乙個函式,函式的函式名實際上就是乙個指標函式名指向該函式的 在記憶體中的首位址。int get2 void int get3 void ...