C/C++开发: 函数指针用法

标签: C  C++  函数指针

1 函数指针

函数名和变量名一样,也对应一个地址,

实际上,每个函数在编译后都对应一串指令,这些指令在内存中的位置,就是函数的地址

和变量地址一样,我们可以用一个指针类型来表示函数的地址,指针变量也是变量

void (*p) (int)

变量名: p

变量类型: 函数指针 ,记作 void (int) *

返回值为void,参数为int的函数

函数指针,表示的是函数代码的地址

函数指针,可用于表示调用目标函数

函数名,就表示函数的地址

对于函数指针来说,&号可以省略


2 代码演示

注意函数类型和指针类型要一样

// C_Demo.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

void example() {

}

int test1(int a){

	return a;
}

int test2(int a,int b){

	return a-b;
}

void test3(){
	printf("hello test3");
}

int _tmain(int argc, _TCHAR* argv[])
{
 

	// 取地址方式 %08x
	printf("example地址:%08x\n",example);
	printf("example地址:%08x\n",&example);
	printf("example地址:%08x\n",*example);

	// 取地址方式 %p
	printf("example地址:%p\n",example);
	printf("example地址:%p\n",&example);
	printf("example地址:%p\n",*example);


	//带一个参数,且有返回值
	int (*p1) (int);

	p1 = &test1;

	int  a = p1 (1);
	printf("p1:%d\n",a);

	//带2个参数,且有返回值
	int (*p2)(int,int);
	p2 = test2;

	printf("p2:%d\n",p2(5,8));


	// 无参数,无返回值
	void (*p3) ();
	p3 = test3;
	p3();


	while (true)
	{

	}
	return 0;
}

3 结果验证



4 扩展方法

   1 增强可读性:使用typedef将函数指针起个别名

定义: typedef void (*FUN_TEST3) ();
调用:
FUN_TEST3 p4 ;
p4 = test3;
p4();

2 函数指针作为一个参数

定义:
void test4(FUN_TEST3 t3){
   t3();
}
调用 :test4(p4);








版权声明:本文为taoerit原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/taoerit/article/details/77523596

智能推荐

【C语言】函数指针与指针函数

指针函数:本质是一个函数,函数返回值是某种类型的地址(指针) 函数指针:本质是一个指针(地址),指向某个函数的地址(函数名是作为函数地址) 定义方式 由于在C语言运算符优先级表中,`()`的优先级比`*`高, 所以在 int *fun()中,()先和函数名fun结合,定义为函数,这是指针函数; 在int (* fun)() 中,*和函数名fun先结合,定义为指针,这是函数指针。...

C语言---指针函数和函数指针

指针函数 返回值是一个指针,就称为指针函数,是一个函数 从getword函数中获得是一个字符串 通常没有一个类型来定义字符串,都是用char类型指针定义字符串,用char类型指针事实上指向一个字符,我们用它来指向字符串的第一个字符,而字符串约定俗成截止于空字符,也就是反斜杠0\0,所以知道了第一个字符就知道整个字符串,由编译器自己去找到整个字符串。 注意不要返回函数的局部指针 "appl...

C/C++函数指针与指针函数

关于指针,前面文章C语言指针详解有过介绍,这里主要讨论函数指针和指针函数。 1 什么是指针? 定义:指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量; 上面一个 4GB 的内存可以存放 2^32 字节的数据。左侧连续的十六进制编号就是内存地址,每个内存地址对应一个字节的内存空间。而指针变量保存的就是这个编号,也即内存地址。 指针的声明: 指针其实就是一个变量,指针的声明方式与一般的...

【C语言】函数,函数指针;指针数组,数组指针。

先定义一些功能简单的函数: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 (一) 声明一个函数指针,指向上面函数。 此时主函数实现为: 1 2 3 4 5 6 7 8 9 10 主函数中第5行: 1 我们来简单地分析一下,从左边括号开始分析,可看出这是一个指针,这个指针指向函数,函数有两个char 型的参数,函数的返回值为char 型。 ...

浅谈C指针,数组,函数指针

        工作中发现很多初入职场的同事不会使用指针,或者惧怕指针。作为C语言老鸟,在这里写一些有利于初学者理解C指针的东西,希望对他们有帮助吧。 1.C语言里,指针可以说是地址变量。 比如 n是一个变量。它的类型是int; p也是一个变量。可以这么理解:它的类型是(int*); 官方说法是:一个指向int的指针;直白说法是:p这个地址,是按照int的形...

猜你喜欢

CV笔记03:自监督GAN(ss-gan)

无需标注数据,利用辅助性旋转损失的自监督GANs,-- 对抗+自监督的无监督方式 《通过辅助旋转损失进行的自监督GAN》CVPR 2019 论文速看 0.摘要 目前自然图像合成主要是条件GAN,但是其缺点是需要标注数据。 我们利用两种流行的无监督学习技术,对抗训练和自我监督,并朝着缩小有条件GAN和无条件GAN之间的差距迈出了一步。 我们允许网络在代表学习的任务上进行协作,同时相对于经典GAN博弈...

题目练习

题目: 解决的代码: 注意:链表指针在操作以后记得移动...

Retrofit(三)上传文件

想了想,觉得还是把自定义的东西放到最后再讲,所以讲下用Retrofit上传文件,就拿上传图片来说,因为上传图片我是想写一个专题的,包括以下: 1.上传图片操作 2.展示图片操作 3.选择图片操作 上传图片这篇讲,用Retrofit,之后我还想写一篇是用httpurlconnection的,因为用它会有个拼接的操作,只有经历过拼接才会更深刻的了解使用Http上传文件的过程。展示图片我其实已经写完了,...

Linux安装SQL2019

官方文档 导入公共存储库 GPG **: 为 SQL Server 2019 注册 Microsoft SQL Server Ubuntu 存储库: 使用以下命令进行安装 SQL2019: 包安装完成后,运行 mssql-conf setup,按照提示设置 SA 密码并选择版本,并执行以下命令: 完成配置后,验证服务是否正在运行:...

vue-cli使用vscode编辑器如何自动eslint检测

VSCode 保存时自动ESlint格式化 Eslint 自动格式化 首先安装ESLint插件 2.安装完成后,每次修改完代码都需要执行 "npm run lint"之后才能格式化 打开设置选项 编辑代码settings.json 新建.eslintrc.js文件 根据eslint官网规则(eslint官网),编写eslintrc.js文件 保存之后,今后在保存时就能自动ESL...