函数指针和函数指针数组的用法和转移表、函数指针作为函数的返回值出现

函数指针:是指向函数的指针变量,本质上是一个指针变量,表示的是一个指针,它指向的是一个函数。

我们用栗子给大家说明:

(1)函数指针

 

//函数指针
//转移表
int add(int a, int b)
{
	return a + b;
}
int sub(int a, int b)
{
	return a - b;
}
int mul(int a, int b)
{
	return a * b;
}
int Div(int a, int b)
{
	if (b != 0)
		return a / b;

}
int main()
{
add(2, 5);
	int(*p)(int ,int);
	p = add;
	printf("%d\n", p(4, 5));
	p = sub;
	printf("%d\n", p(4, 5))
}

可以看到笔者定义了+-*/四个函数。用函数指针的方式调用函数

在这里先引入一个概念:

函数名代表的是函数的入口地址,所以可以用指针指向

函数指针的定义方式如下:

指针函数指向的函数返回值类型 指针函数名 指针指向的函数的参数类型

int(*p)(int ,int);//函数指针

p=add;将指针指向函数名

接下来的调用就和原来调用函数一样。

(2)函数指针数组

#include<stdio.h>
#include<stdlib.h>
//函数指针
//转移表
int add(int a, int b)
{
	return a + b;
}
int sub(int a, int b)
{
	return a - b;
}
int mul(int a, int b)
{
	return a * b;
}
int Div(int a, int b)
{
	if (b != 0)
		return a / b;

}
int main()
{
int(*p[])(int, int) = { add,sub,mul,Div };//函数指针数组
	int n = sizeof(p) / sizeof(p[0]);
	for (int i = 0; i < n; ++i)
	{
		printf("%d\n", p[i](4, 5));
	}
	test(4, 5, add);//函数指针作为函数的参数

	system("pause");
	return 0;
}

可以看到函数指针数组的本质是个数组,怎么判断请看我的另一篇博客https://blog.csdn.net/weixin_43447989/article/details/90216974

函数指针数组的定义是:指向的函数的返回值各类型 指针数组名 指向的函数的参数

初始化方式如int(*p[])(int, int) = { add,sub,mul,Div }

元素都是相同的格式。

(3)函数指针作为函数的返回值出现

int add(int a, int b)
{
	return a + b;
}
//fn函数的返回值是个指针(指向函数(int xx(int ,int))的指针)
int(*fn(int n))(int, int)//此处的n没什么用
{
	printf("fn:n=%d\n", n);
	return add;//int *p(int ,int)
}
int main()
{
	int value = fn(100)(3, 9);
	printf("%d\n", value);
	system("pause");
	return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值