函数指针和函数的重载

本文介绍了C++中的函数指针概念,强调函数指针变量的形式需与所指向函数的形式一致,并通过示例说明了如何定义和使用函数指针。同时,讨论了函数指针与函数重载的关系,指出在函数重载时,编译器会对不同参数的函数进行内部重命名,导致通过函数指针调用时必须匹配原始函数签名,否则会出现错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、函数的指针

函数的形式:返回值类型 函数名 ([形参列表])

函数指针的形式:返回值类型 (指针变量) ([形参类型列表])

函数名就是该函数的入口地址,是一块内存区域的首地址,如果某个指针等于该入口地址,则这个指针就是函数的指针。

函数指针变量的形式应该和所指向的函数的形式一致,如:

int fuc(int a)

int (* ptr_fuc1)(int )

int (* ptr_fuc2)(int ,int)

其中,ptr_fuc1能指向fuc,ptr_fuc2不能指向fuc。

定义函数指针一般有三种方式:

#include <iostream>

using namespace std;

void fuc(int a, int b)
{
	cout << "a = " << a << ", ";
	cout << "b = " << b << endl;
}

int main()
{

	//方式1,定义了一个函数指针变量,比较常用
	void(*ptr_fuc1)(int, int) = NULL;
	ptr_fuc1 = fuc;
	ptr_fuc1(1, 2);

	//方式2,使用typedef, 此处定义了一个函数类型
	typedef  void (ptr_fuc2)(int, int);
	ptr_fuc2  *fuc2 = NULL;
	fuc2 = fuc;
	fuc2(3, 4);

	//方式3,使用typedef, 此处定义了一个函数指针类型ptr_fuc2
	typedef  void (*ptr_fuc3)(i阿nt, int);
	ptr_fuc3  fuc3 = NULL;
	fuc3 = fuc;
	fuc3(5, 6);

	system("pause");
	return 0;	
}

注意函数指针变量和函数指针类型的区别。

二、函数指针与函数重载

函数重载不再赘述,可参考https://www.cnblogs.com/wuchanming/p/3895960.html

有函数:

int fuc(int a)

int fuc(int a, int b)

函数指针:

int (*ptr_fuc)(int)

然后:

ptr_fuc = fuc;

调用时:

ptr_fuc(1);

ptr_fuc(1,2);//错误,原因是函数重载在编译时,内部分别进行了重命名fuc_i和fuc_ii,ptr_fuc = fuc将指针变量ptr_fuc指向了fuc_i,所以对该区域传送两个参数校验会出错。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值