函數的入口是地址,所以是可以用一個指針去指向這個地址的.當然剛開始使用函數指針的時候,感覺是很怪異的.多用幾次就好了,要有一個适應的過程.
如何聲明一個函數指針
#include <stdio.h>
//函數聲明
int add(int a,int b);
int add(int a,int b)
{
return a b;
}
int main(int agc,char *argv[])
{
//如何聲明一個函數指針,假設要接收add的函數的指針
//1. 先寫出接收的函數聲明,改一下函數名
//int calc(int a,int b);
//2. 用括号将函數名
//int (calc)(int a,int b);
//3. 既然函數指針,是一個指針,在函數名加*号是少不了的
int (*calc)(int a,int b);
calc = add;
int sum = calc(10,20);
printf("sum=%d\n",sum);
return 0;
}
#include <stdio.h>
int add(int a,int b);
int sub(int a,int b);
//函數指針作為參數
int calc(int (*fp)(int a,int b),int a,int b);
int add (int a,int b)
{
return a b;
}
int sub(int a,int b)
{
return a - b;
}
int calc(int (* fp)(int a,int b),int a,int b)
{
return (fp)(a,b);
}
int main(int argc,char *argv[])
{
int a,b;
printf("請輸入兩個數(10 20)\n");
scanf("%d %d",&a,&b);
//将函數指針作為參數傳入函數
printf("調用add函數結果:%d\n",calc(add,a,b));
printf("調用sub函數結果:%d\n",calc(sub,a,b));
return 0;
}
函數指針作為參數使用
函數指針作為返回類型
#include <stdio.h>
//函數聲明
int add(int a,int b);
int sub(int a,int b);
//函數聲明,有三個參數,一個函數指針,剩下兩個是int類型的參數
int calc(int (*fp)(int a,int b),int a,int b);
//函數指針作為函數的返回類型使用
//函數聲明,返回一個有2個參數函數指針,參數為char類型
int (*selected(char c))(int a,int b);
int add(int a,int b)
{
return a b;
}
int sub(int a,int b)
{
return a - b;
}
int calc(int (*fp)(int a,int b),int a,int b)
{
return (*fp)(a,b);
}
int (*selected(char c))(int a,int b)
{
switch(c)
{
case ' ': return add;
case '-': return sub;
}
}
int main(int argc, const char * argv[])
{
printf("輸入一個計算(10 20)\n");
int a,b;
char c;
int (*pf)(int ,int);
scanf("%d %c %d",&a,&c,&b);
pf = selected(c);
int sum = pf(a,b);
printf("%d %c %d = %d\n",a,c,b,sum);
return 0;
}
函數指針作為函數的返回類型使用
如果您覺得對您有用的話,可以點個贊或者加個關注,歡迎大家一起進行技術交流
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!