指針可以指向變量、數組,也可以指向函數,函數指針就是指向函數的指針
函數名實際是程序在內存中的起始地址。而指向函數的指針可以把地址傳遞給函數
也可以從函數返回給指向函數的指針。例如這個例子:通過一個函數求兩個數的和
並通過函數指針調用該函數。
#include<stdio.h>
int sum(int a,int b);//求和函數的聲明
void main()
{
int a,b;
int (*fun)(int,int);//聲明一個函數指針
printf("請輸入兩個整數:");
scanf("%d,%d",&a,&b);
printf("第一種調用函數的方法:函數名調用求和函數:\n");
printf("%d+%d=%d\n",a,b,sum(a,b));//通過函數名調用
fun=sum;//函數指針指向求和函數
printf("第二種調用函數的方法:函數指針調用求和函數:\n");
printf("%d+%d=%d\n",a,b,(*fun)(a,b));//通過函數指針調用函數
}
int sum(int m,int n)//求和函數實現
{
return m+n;
}
程序運行結果如下:
在程序中的語句int(*fun)(int,int);是聲明一個指向函數的指針變量
並且所指向的函數返回值是整型,有兩個整型參數。語句fun=sum
表示函數指針fun指向函數sum,fun和sum都指向函數sum的起始地址
程序在編譯階段會被翻譯成一行行指令並被裝入到內存區域。
其中,主函數中的語句(*fun)(a,b);是執行調用求和函數的,也可以寫成fun(a,b)的形式
因為函數本身就是一個地址