指针进阶篇——函数指针

指针进阶篇——函数指针

一、理解函数指针

1.什么是函数指针

我们都知道指针是利用地址,它的值直接指向存在电脑存储器中的另一个地方的值。因为指针存储的值是一块内存地址,而函数也是存在内存某个地方,所以,当一个指针指向的内存地址是一个函数的话,这种指针就是函数指针

当我们试着打印一下函数地址,让我们观看一下结果:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int max(int x, int y)
{
   
	return x > y ? x : y;
}
int main()
{
   
	printf("%p\n", max);
	printf("%p\n", &max);
	return 0;
}

结果如图:
在这里插入图片描述
所以我们得出结论:函数是有地址的,并且函数的函数名就是函数的地址。

2.定义函数指针

当我们搞清楚了函数的地址,那么我们来看一下定义函数指针:
首先,我们要明白函数的三大要素:函数名、函数参数、函数的返回类型,函数指针是一个指针,所以当我们定义是名字要与结合,因为在c语言中[]优先级高于,所以我们要用(*p)来解决,然后,后面跟上函数的参数类型,我们那的max函数两个参数类型为:int x,int y,所以我们则写为(*p)(int ,int ),因为此函数返回类型为int,所以我们可写为:

int (*p)(int ,int)=max;

声明函数指针需要注意的事项:
1.指针对应的数据类型必须与函数返回类型相同。
2.指针的参数列表必须与函数参数列表中的数据类型的顺序一致,不需要形参。
我们来看一个例子,更好的理解函数指针的使用。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int max(int x, int y)
{
   
	return x > y ? x : y;
}
int main()
{
   
	int a = 20;
	int b = 10;
	int rm, rp;
	int (*p)(int, int) = &max;
	rm = max(a, b);
	printf("max(%d,%d)=%d\n", a, b, rm);
	rp = p(a, b);
	printf("p(%d,%d)=%d\n", a, b, rp);
	return 0;
}

执行结果:
在这里插入图片描述

3.加深对函数指针的认识

我们先看两段代码:

//代码1
(*void(*<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值