文档介绍:指针与函数
指向函数的指针
返回指针值的函数
第1页/共23页
指向函数的指针
指向函数指针变量的定义
用指向函数的指针变量来调用函数
指向函数的指针变量作函数参数
第2页/共23页
指向函数指针变量的定义
指向函数的指针变量(简称函数指针)
每一个函数都是一个程序模块,这个模块在内存中都占有一片存储区,函数名代表了该存储区的首地址,称为函数的入口地址 。定义一个指针变量并且使它指向函数的入口地址,就称这个指针变量为指向函数的指针变量。
指向函数的指针变量的定义
<存储类别> <数据类型>(*指针变量名)([形参表]);
存储类别 函数指针变量本身的存储特性;
数据类型 指针指向的函数的返回值类型;
给指向函数的指针变量赋值:
指向函数的指针变量=函数名;
函数指针的调用格式
(*函数指针变量)([实参表])
第3页/共23页
指向函数的指针
指向函数指针变量的定义
用指向函数的指针变量来调用函数
指向函数的指针变量作函数参数
第4页/共23页
定义指向函数的指针变量后,就可将一个函数名赋给该指针变量。此后,对该指针变量的指针运算就是使程序控制转移到指针指向的函数入口地址去执行该函数的函数体。
例如:有函数说明为:
void swap(int x,int y);
指向函数的指针变量定义:
void (*fp)(int x,int y);
将函数名swap赋给函数指针变量fp:
fp=swap;
使用函数指针变量fp调用函数swap的形式:
(*fp)(a,b) fp(a,b);
用指向函数的指针变量调用函数
第5页/共23页
例5-1 编程序计算下面的公式,其中n从键盘输入,要求使用指向函数的指针变量来实现。
(n为奇数时)
(n为偶数时)
用指向函数的指针变量调用函数
第6页/共23页
用指向函数的指针变量调用函数
F
F
T
T
程序算法描述
开始
n>=1
n%2==0
fp=f1
fp=f2
(*fp)(n)调用函数
结束
输入n值
输出结果
输出数据错误
第7页/共23页
根据以上算法描述写出程序代码如下:
#include <>
double f1(int x),f2(int x);
void main()
{ double (*fp)(int x); /*定义指向函数的指针变量fp*/
int n;
printf(“input n:”);
scanf(“%d”,&n);
if(n>=1)
{ if(n%2==0)
fp=f1; /*n为偶数,指针变量fp指向函数f1()*/
else
fp=f2; /*n为奇数,指针变量fp指向函数f2()*/
printf(“value=%\n”,(*fp)(n)); /*用函数指针调用函数*/
}
else
printf(“Data error!\n”);
}
用指向函数的指针变量调用函数
6
6
第8页/共23页
double f1(int x)
{ int k;
double value=;
for(k=2;k<=x;k=k+2)
value=value+()*();
return value;
}
double f2(int x)
{ int k;
double value=;
for(k=3;k<=x;k=k+2)
value=value+()*();
return value;
}
用指向函数的指针变量调用函数
6
1+++
第9页/共23页
指向函数的指针
指向函数指针变量的定义
用指向函数的指针变量来调用函数
指向函数的指针变量作函数参数
第10页/共23页