在定义和使用指向函数的指针变量分不清楚,搞混淆,发现自己对函数的理解不是不够细节和全面
什么是函数的指针
如果在程序中定义了一个函数,在编译时会把函数的源代码转换成可执行代码并分配一段存储空间。该内存空间有一个起始地址,也称为函数的入口地址,每次调用函数时都从改地址入口开始执行此段函数代码。函数名代表函数的起始地址。
因此,调用函数时,从函数名得到函数的起始地址,并执行函数代码(p=max,即就是指针变量p指向了max函数)
1.在给指针变量赋值时区分p=max和p=max(a,b)
后者是错误的,因为其作用是将调用max函数所得到的函数值赋给p,而不是将函数的入口地址赋给p。
2.c=(*p)(a,b)//用函数指针变量调用函数
①用(*p)代替函数名
②上述表示“调用由p指向的函数,实参为a,b。得到的函数值赋给c”
#include<stdio.h>
int main()
{
int max(int,int );
int(*p)(int, int);//定义指向函数的指针变量(表示指针变量p可以指向函数返回值为整形且有两个整形参数的函数)
int a, b, c;
p = max;
printf("please enter a and b:");
scanf("%d,%d",&a,&b);
c = (*p)(a, b);
printf("a=%d\nb=%d\nmax=%d\n", a, b, c);
return 0;
}
int max(int x, int y)
{
int z;
if (x > y) z = x;
else z = y;
return (z);
}
练习程序
1.输入两个整数,然后让用户选择1或2,选1时调用max函数,输出二者中的大数,选2时调用min函数,输出二者中的小数
#include<stdio.h>
int main()
{
int max(int, int);
int min(int, int);
int(*p)(int, int);
int a, b, c, n;
printf("Please enter a and b:");
scanf("%d,%d",&a,&b);
printf("Please choose 1 or 2:");
scanf("%d",&n);
if (n == 1) p = max;
else if (n == 2) p = min;
c = (*p)(a, b);
printf("a=%d,b=%d\n",a,b);
if (n == 1) printf("max=%d\n",c);
else printf("min=%d\n",c);
return 0;
}
int max(int x, int y)
{
int z;
if (x > y) z = x;
else z = y;
return(z);
}
int min(int x, int y)
{
int z;
if (x > y) z = y;
else z = x;
return(z);
}
应用:菜单提示输入一个数字,然后根据输入的不同值调用不同的函数,从而实现不同的功能