函數指針
- 2021 年 1 月 20 日
- 筆記
1,明確相關概念
a,指針函數:一個函數,只是返回值是一個指針,eg: int *add(int a ,int b)
b,函數名就是整個函數裡面程式碼的首地址
int add(int a,int b)
{
printf(“%d\n”,a);
print(“%d\n”,b);
return a + b;
}
add 函數名就是整個函數add的首地址,就是三條語句的首地址,等於printf(“%d\n”,a);的首地址
2,函數指針概念:本質是一種程式設計師自己定義的數據類型(跟int,結構體數據類型一樣),它保存著一個函數的地址
3,函數指針數據類型聲明的語法:(不會分配記憶體,大型程式寫於頭文件)
語法: 返回值數據類型(*函數指針名)(形參表)
eg:int (*pfunc)(int a,int b);//pfunc就是一種數據類型,當成int類型來用
or eg:typedef int (*pfunc_t)(int a,int b);//對函數指針取別名pfunc_t(建議方法)
4,函數指針變數定義語法格式:函數指針名 函數指針變數;
eg:pfunc_t pfunc;//pfunc就是一個函數指針變數,將來保存函數地址
5,函數指針變數初始化
pfunc_t pfunc = add;//定義、初始化函數指針變數,指向add
6,通過函數指針變數來訪問指向的函數,通過函數指針變數調用指向的函數
語法:函數指針變數名(實參表);
//實例:
#includ<stdio.h>
typedef (*pfunc_t)(int a,int b);
int add(int a,int b)//定義加法函數
{
return a + b;
}
int sub(int a,int b)//定義減法函數
{
return a -b;
}
void main(void)
{
int ret = 0;
pfunc_t pfunc = NULL;//定義函數指針變數且初始化為空
pfunc = add;//把add函數的地址保存於函數指針變數pfunc
ret = pfunc(100,200);調用add函數
printf(“a + b = %d\n”,ret);
func = sub;///把sub函數的地址保存於函數指針變數pfunc
ret = pfunc(100,200);//調用sub函數
printf(“a + b = %d\n”,ret);
}