C/C++學習:函數指標,學習函數指標
以前在書上看到函數指標相關的都沒怎麼重視,但是最近在實際的工作中卻派上了用場。所以認真地學習了一遍。
函數指標的申明
申明一個函數指標很簡單,就是將函數申明中的函數名替換為一個指標即可:
C/C++int test(int para1, double *para2); // 函數申明int (*pf)(int para1, double *para2); // 函數指標申明
NOTE: 必須在申明中用括弧將*pf括起來,因為括弧的優先順序比*運算子高,因此:
C/C++int (*pf)(int para1, double *para2); // 一個指向函數的指標int *pf(int para1, double *para2); // 一個返回指標的函數
申明完函數指標的下一步就是對函數指標賦值,也就是將函數指標指向一個類型匹配的函數(這跟基本類型的指標一致),一個函數的函數名就是該函數的地址:
C/C++pf = test;int (*pf1)(int para1, double *para2) = test; // 也可以在函數指標申明時完成初始化
C++11有了自動類型推斷功能,就簡單了很多:
C++11 codeauto pf = test;
使用函數指標調用函數
(*pf)扮演的角色與函數名相同,因此使用(*pf)時,只需要將它看做函數名即可:
C/C++int n = 0;double d = 0.0;int r = 0;r = (*pf)(n, &d);r = pf(n, &d); // 這種方式C/C++也是允許的
函數指標數組
我們有可能還需要用到函數指標數組,樣本如下:
C/C++int test1(int para1, double *para2); // 函數申明int test2(int para1, double *para2); // 函數申明int test3(int para1, double *para2); // 函數申明int (*pfArray[3])(int para1, double *para2) = {test1, test2, test3}; // 函數指標數組申明及初始化r = *pfArray[0](n, &d); // 函數調用
可以看到這種方式使用函數指標是比較麻煩的,試想如果上面的函數返回值是const指標,而我們又想將函數指標數組申明為不可更改的,那這個const應該加到哪?這裡提供另外一個比較簡單的解決方案,也就是下面將要說到的使用typedef進行簡化。
使用typedef進行簡化
C/C++typedef int (*p_fun)(int para1, double *para2); // 這樣我們就能像使用一個普通類型那樣來使用函數指標了p_fun pf = test;const p_fun pf1 = test; // 常量函數指標申明及初始化,注意跟一般的const資料類型一樣,常量函數指標必須在申明時完成初始化p_fun pfArray[3] = {test1, test2, test3};const p_fun pfArray1[3] = {test1, test2, test3}; // 常量函數指標數組申明及初始化
It's that easy!
參考書籍:《C++ Primer Plus (第6版)中文版》
解釋c語言函數指標的作用
你上面那一段話,對於初學者來說確實坑爹,說的像什麼官方話語,我看著也就只能理解個模糊大概。
先給你舉個例子吧,函數指標的寫法
int *p;
int a;
p=&a; //這是一般整型指標
#include <iostream>
using namespace std;
int arr(int a,int b){return 0;}//比如說是函數1
int brr(int a,int b){return 1;}//比如說是函數2
int main()
{
int (*frr)(int,int); //這裡就是函數指標
frr =arr; //它可以指向arr
cout<<frr(1,2)<<endl;
frr=brr;//也可以指向brr,只需要改改指向的對象,就可以操作不同的函數
cout<<frr(1,2)<<endl;
return 0;
}
c語言中怎用返回函數指標
有C語言的學習資料,是否可以幫到你呢?
你可以登入查看。
希望對你有用
記得採納喲