函数指针,函数指针做函数参数,返回指针的函数

本文介绍了C语言中函数指针的概念,包括如何定义函数指针、将函数指针作为函数参数以及创建返回函数指针的函数。通过示例说明了如何使用函数指针进行函数调用和传递,强调了函数指针在程序设计中的灵活性。
摘要由CSDN通过智能技术生成

函数指针

在程序中定义一个函数,在编译时,编译系统为函数代码分配一段存储空间,这段存储空间的其实地址称为这个函数的指针。

int square(int);
int square(int num) {
	return num * num;
}
int main()
{
		/*int i = 3, y = 4;
		printf("互换前:i=%d,y=%d\r\n", i, y);
		swap(&i,&y);
		printf("互换后:i=%d,y=%d", i, y);*/
//函数指针		指针函数-> int *p();函数指针->int (*p )()该指针指向一个函数;
	int num=8,i=9;
	int (*fp)(int);//这是一个函数指针有一个int的返回值和一个int的形参;
	printf("请输入一个整数:"); 
	//scanf("%d",&num);
	fp = square;
	printf("%d\n",(*fp)(i));
	printf("%d", fp(i));//这样写让人觉得是函数名而不是函数指针。
	return -1;
}

int (*fp)(int);//这是一个函数指针有一个int的返回值和一个int的形参;与前面的squre函数定义相对应。 (*fp)(i)里的i就是squre里num的实参。

用指向函数的指针做函数参数

int add(int, int);
int sub(int, int);
int calc(int(*fp)(int, int), int, int);
int add(int num1,int num2) {
	return num1 + num2;
}
int sub(int num1, int num2) {
	return num1 - num2;
}
int calc(int (*fp)(int, int), int num1, int num2) {
	return (*fp)(num1, num2);
}
int main()
{
	printf("%d\n", calc(add, 8, 7));

把一个函数指针当做函数参数。
int calc(int(*fp)(int, int), int, int);这个函数里有三个参数:
1.一个指针,这个指针为函数指针
2.int变量
3.int变量

int calc(int (*fp)(int, int), int num1, int num2) {
return (*fp)(num1, num2);
}
printf("%d\n", calc(add, 8, 7));

(*)fp(int)(int)该指针指向了add这个函数,又因为calc里返回的是函数指针所指向函数里的值,那个值为Int所以与calc前面的类型名刚好对应,所以把num1和num2给了函数指针进而进行运算。

返回指针值的函数

int calc(int(*fp)(int, int), int, int);
int (*select(char))(int, int);
int add(int num1,int num2) {
	return num1 + num2;
}
int sub(int num1, int num2) {
	return num1 - num2;
}
int calc(int (*fp)(int, int), int num1 , int num2) {
	return (*fp)(num1, num2);
}
int (*select(char op))(int, int) {
	switch (op) {
	case '+':return add;
	case '-':return sub;
	}
}
int main()
{
	int (*fp)(int, int);
	fp = select('+');
	printf("%d\n", calc(fp, 8, 7));

int (*select(char))(int, int); 这个定义实际上就是定义了一个名为select的函数。这个函数的形参为char,这个函数的返回值是一个指针,,返回指针值的函数的一般形式为:
类型名 +星号+函数名(参数列表)
比如 int *a(int x,int y);第一个int表示返回的指针指向整形变量。而在int (*select(char))(int, int);中返回的是一个int类型的并且参数为2个int的函数指针。因为*select(char op)这个函数返回的是一个指针,而这个指针与前面int 。。。 (int, int)结合,变成了函数指针的形式。所以该select函数返回的是一个函数指针。所以当select函数里面的实参变成+时,该函数的返回值指向的是add这个函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值