函数指针

本文详细介绍了C语言中的函数指针概念,包括如何声明、初始化和使用函数指针。通过实例展示了如何通过函数指针调用函数,并解释了不同类型函数指针的声明方式。此外,还提供了一个整型计算器的代码示例来说明函数指针的实际应用。
摘要由CSDN通过智能技术生成

1.概念:函数指针是指向函数的指针变量,函数指针本身应为指针变量,且指针变量指向函数,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址,有了指向函数的指针变量之后,可用该指针变量调用函数,函数指针有2个用途,调用函数和做函数参数。

2.声明:返回类型(*指针变量名)([形参列表])

(1):“(指针变量名)”中的括号不能省略,括号改变了运算符的优先级也将发生改变,若省略整体则成为一个函数声明,声明了一个返回的数据类型是指针的函数,后面的形参列表表示指针变量所指向的函数所带的参数列表

(2):Eg:int (*lin) (int ,int ) /*声明一个函数指针*/

int add(int x,int y)/*函数声明*/

int (*lin) (int ,int)=Add/*将函数指针初始化*/

int(*lin)(2,3)/*函数指针用法,且*不参与运算,可省略*/

3.代码例1:( *( void ( * ) ( ) ) 0 ) ( )

(1)void ( * )( ) 是一个函数指针类型,

(2)( void ( * ) ( ) ) 作用是将0强制类型转换成void ( * )( )类型

(3)整体意思:将0强制转换为一个函数指针类型,0地址处放一个返回类型是void,无参的一个函数,将调用0地址处的子例程.

代码例2:void ( * lin ( int ,void( * ) ( int ) ) ) int( );//这是一个函数声明

void ( * ) ( int )是一个函数指针,lin ( int,void ( * ) ( int ) )是一个lin函数,lin函数的参数第一个为int类型,第二个为void ( * ) ( int )的函数指针类型,且lin函数的返回值类型也是void ( * ) ( int )类型

typedef void ( *pf ) ( int )   /*将void ( * ) ( int )重新起个名字叫pf

代码可简化为:pf lin ( int ,pf )

4.代码使用例题(写一个整型计算器):

#include<stdio.h>
	int add(int a, int b)
{
	int c = a + b;
	return c;
}
int sut(int a, int b)
{
	int c = a - b;
	return c;
}
int rid(int a, int b)
{
	int c = a * b;
	return c;
}
int div(int a, int b)
{
	int c = a / b;
	return c;
}
void menu()
{
	printf("**************                                     **************\n");
	printf("**************                                     **************\n");
	printf("**************          calculadora cientiflca     **************\n");
	printf("**************          1.add       2.sut          **************\n");
	printf("**************          3.rid       4.div          **************\n");
	printf("**************          0.out                      **************\n");
	printf("**************                                     **************\n");
	printf("**************                                     **************\n");
}
int main()
{
	int input = 0;
	int x = 0, y = 0;
	int (*pdf[])(int, int) = { 0,add,sut,rid,div };//初始化函数指针数组
	do
	{
		menu();//打印菜单
		printf("请输入选项:");
		scanf("%d", &input);
		if (input == 0)
		{
			printf("退出成功\n");
			break;
		}
		else if (input > 0 && input <= 4)
		{
			printf("请输入需要计算的两个数:");
			scanf("%d %d", &x, &y);
			int ret = pdf[input](x, y);//调用函数指针数组
			printf("ret=%d\n", ret);
		}
		else
		{
			printf("输入错误,请重新选择\n");
		}
	} while (input);
	return 0;
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值