函數指針

1,明確相關概念程序員

a,指針函數:一個函數,只是返回值是一個指針,eg: int *add(int a ,int b)函數

b,函數名就是整個函數裏面代碼的首地址指針

int add(int a,int b)內存

{io

  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);

}

相關文章
相關標籤/搜索