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);
智能推荐
【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...
