函数指针告诉CPU下一步需要执行哪里的代码的指针, 一数组十分相像.
#include <stdio.h>void function(int i, double d) //一个函数的声明
{
printf("函数运行, %d, %lf\n", i, d)
}
void AnotherFunction(int i, double d) //另外一个函数声明
{
printf("又一个函数运行, %d, %lf\n", i, d)
}
int main()
{
void (*pFun)(int, double) //定义了一个函数指针
int (*p)(int , double) //用于调试的函数指针
pFun = function //让这个函数指针指向第一个函数
pFun(10, 10.101) //通过这个函数指针来调用第一个函数
pFun = AnotherFunction //让这个函数指针指向第二个函数
pFun(20, 20.202) //通过这个函数指针来调用第二个函数
//若将以下代码取消注释, 就会产生错误
/*
p = function
p = AnotherFunction
//原因很简单, 因为p是必须指向一个返回值为int, 第一个参数为int, 第二个参数为double的函数, 但是在此代码中定义的函数返回值是void
*/
//这个实验中, 直接用函数名来赋值了, 是因为函数名其实就是这个函数的指针
//而在平常调用函数时, 都要加上(), 如:printf("")
//这里, "()"就相当于'*'(就是取值运算符), printf是函数指针, 就相当于是数组名, 即数组的首地址
return 0
}
int(*p)(参数表列)这个是定义一个指向函数的指针,返回值为整型。比如int
max(int
a,int
b)将max换成(*p)
即可,p里放的是max函数的入口地址,所以,此时的p做自加自减等运算无意义。不能用*(p+1)表示函数的下一条指令。
int
*p()是函数,此函数的返回值是个指向整型变量的指针变量。
***************************************************
以上是你需要的,下面是一些其它相关容易混淆的:
int
*p[n]:定义指针数组P,它由n个指向整型数据的指针元素组成。
int
(*p)[n]:P为指向含n个元素的一维数组的指针变量。