令我头疼的指向函数的指针

在定义和使用指向函数的指针变量分不清楚,搞混淆,发现自己对函数的理解不是不够细节和全面

什么是函数的指针

如果在程序中定义了一个函数,在编译时会把函数的源代码转换成可执行代码并分配一段存储空间。该内存空间有一个起始地址,也称为函数的入口地址,每次调用函数时都从改地址入口开始执行此段函数代码。函数名代表函数的起始地址。

因此,调用函数时,从函数名得到函数的起始地址,并执行函数代码(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);

}

 应用:菜单提示输入一个数字,然后根据输入的不同值调用不同的函数,从而实现不同的功能

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值