使用typedef封装函数指针新类型
typedef的用法是在定义前加上这个关键字就能得到一个新的类型名例如int a;变成typedef int a ;那么就可以用a表示Int了。比如void (*test)(void);那么加上typedef就变成了typedef void (*test)(void);类型名test就表示一个返回值是void参数是void的一个函数指针类型与上面的int a不同这里的变量名是testvoid test_opr(void) {}; typedef void (*test)(void); test ptr test_opr; ptr();void test(void);这个函数声明表示定义了一个参数为void返回空的test函数。并且这里面的test的值就是存储函数指针也就是这个函数的第一条语句的内存地址。*为解引用操作对函数进行解引用操作*test按道理讲要返回函数内容也就是函数体但是事实上没法返回函数体。就对解引用降级退化所以test和*test以及**test不管多少个解引用结果都是这个函数的内存地址。但还是注意test和*test本质上是不一样的一个是函数指针存储函数的第一条汇编指令的内存地址一个是这个函数的函数体在输出的时候会隐式退化成test。#include stdio.h static int count 0; void test(void) { printf(test count %d task start\n, count); } void (*test_por)(void) test; int main() { printf(test value 0x%X, *test value 0x%X **test value 0x%X test value 0x%X\n, test, *test, **test, test); test(); (*test)(); (**test)(); (*test_por)(); (test)(); //(test_por)(); //注意此时这个test_por是存储函数内存地址的容器也就是说test_por获取到的是存储函数内存地址的地址所以可以看到后面输出的test_por地址和test_por不同。也就是说test_por存储的内存数据test_por是存储这个数据的内存地址 //事实上test_por存储的是函数体的第一条指令的地址 printf(test_por value 0x%X, *test_por value 0x%X **test_por value 0x%X test_por value 0x%X\n, test_por, *test_por, **test_por, test_por); while(1) { } return 0; }输出的结果也能证实test value 0x681F14A4, *test value 0x681F14A4 **test value 0x681F14A4 test value 0x681F14A4 test count 0 task start test count 1 task start test count 2 task start test count 3 task start test count 4 task start test_por value 0x681F14A4, *test_por value 0x681F14A4 **test_por value 0x681F14A4 test_por value 0x681F9000

相关新闻

Mac终极降温指南:Turbo Boost Switcher让你的Intel Mac告别过热烦恼

Mac终极降温指南:Turbo Boost Switcher让你的Intel Mac告别过热烦恼

Mac终极降温指南:Turbo Boost Switcher让你的Intel Mac告别过热烦恼 【免费下载链接】Turbo-Boost-Switcher Turbo Boost disabler / enable app for Mac OS X 项目地址: https://gitcode.com/gh_mirrors/tu/Turbo-Boost-Switcher 还在为MacBook Pro的烫手温…

2026/6/29 22:32:47阅读更多 →
如何轻松掌握M3U8视频下载:在线视频本地保存的完整指南

如何轻松掌握M3U8视频下载:在线视频本地保存的完整指南

如何轻松掌握M3U8视频下载:在线视频本地保存的完整指南 【免费下载链接】m3u8-downloader 一个M3U8 视频下载(M3U8 downloader)工具。跨平台: 提供windows、linux、mac三大平台可执行文件,方便直接使用。 项目地址: https://gitcode.com/gh_mirrors/m3u8d/m3u8-d…

2026/6/29 22:32:47阅读更多 →
15年品牌操盘手说句实话:2026年做个人IP定位,90%的人方向都错了

15年品牌操盘手说句实话:2026年做个人IP定位,90%的人方向都错了

北大燕姐15年品牌操盘AI赋能IP定位 6/28 15:502026年做个人IP定位还有机会吗?北大燕姐来回答。15年品牌操盘手,过去一年用AI工具帮上百人做过IP定位诊断。有机会,但机会不在你以为的地方。90%的人做个人IP定位,第一件事是找赛道、…

2026/6/29 22:32:47阅读更多 →
LeetCode 复杂度论证:主定理的推导与算法分析实战

LeetCode 复杂度论证:主定理的推导与算法分析实战

LeetCode 复杂度论证:主定理的推导与算法分析实战 一、复杂度分析不是猜的——从"感觉是 O(n log n)"说起 刷题时经常看到这样的题解:"外层循环 log n 次,内层循环 n 次,所以总复杂度 O(n log n)"。这个结论碰…

2026/6/30 0:53:05阅读更多 →
轻量级语义分割新星LinkNet:如何在移动端实现速度与精度的平衡

轻量级语义分割新星LinkNet:如何在移动端实现速度与精度的平衡

1. LinkNet为何成为移动端语义分割的首选? 第一次接触LinkNet是在一个自动驾驶项目里,当时我们需要在车载设备上实时识别道路场景。试过DeepLabv3和PSPNet这些主流模型后,发现它们就像背着沉重书包的马拉松选手——精度虽高,但根本…

2026/6/30 0:53:05阅读更多 →
免费开源镜像烧录工具Balena Etcher终极指南:安全快速制作系统启动盘

免费开源镜像烧录工具Balena Etcher终极指南:安全快速制作系统启动盘

免费开源镜像烧录工具Balena Etcher终极指南:安全快速制作系统启动盘 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher 在嵌入式开发、树莓派项目或系统…

2026/6/30 0:53:05阅读更多 →
即插即用 | 重塑跨维度交互,GAM注意力机制在ResNet上的实战优化(附完整代码)

即插即用 | 重塑跨维度交互,GAM注意力机制在ResNet上的实战优化(附完整代码)

1. 为什么需要GAM注意力机制? 在计算机视觉领域,注意力机制就像给神经网络装上了"智能探照灯"。想象一下你在夜晚用手电筒找东西,传统方法可能只会均匀地照亮整个房间,而注意力机制能自动把光束聚焦到最重要的区域。但现…

2026/6/30 0:53:05阅读更多 →
HOG+SVM:从特征提取到行人检测的经典实践

HOG+SVM:从特征提取到行人检测的经典实践

1. HOGSVM行人检测技术全景解读 第一次接触HOG特征是在2013年做智能监控项目时,当时需要检测画面中的行人。深度学习还没现在这么火,HOGSVM就是最靠谱的方案。这么多年过去了,这个经典组合依然在很多嵌入式设备上跑得飞起,今天就带…

2026/6/30 0:53:05阅读更多 →
从矩阵运算到密码实践:深入理解Hill密码的加解密机制

从矩阵运算到密码实践:深入理解Hill密码的加解密机制

1. Hill密码的前世今生 第一次听说Hill密码是在大学密码学课上,教授用粉笔在黑板上画了个33矩阵时,我完全没意识到这串数字会成为我后来项目中的关键工具。Hill密码由数学家Lester S. Hill在1929年提出,属于多表替换密码的经典代表。和凯撒密…

2026/6/30 0:48:05阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/29 3:27:55阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/29 2:19:08阅读更多 →
为什么你需要Destiny 2 Solo Enabler:技术原理与实战指南

为什么你需要Destiny 2 Solo Enabler:技术原理与实战指南

为什么你需要Destiny 2 Solo Enabler:技术原理与实战指南 【免费下载链接】Destiny-2-Solo-Enabler Repo containing the C# and XAML code for the D2SE program. Included is also the dependency for the program, and image asset. 项目地址: https://gitcode…

2026/6/30 0:02:58阅读更多 →
第六章:PowerPoint 2010 核心功能与实战应用 —— 从入门到精通

第六章:PowerPoint 2010 核心功能与实战应用 —— 从入门到精通

1. PowerPoint 2010基础操作全攻略 刚接触PowerPoint 2010时,很多人会被它复杂的界面吓到。其实只要掌握几个核心区域,就能快速上手。我最开始用PPT时,经常找不到功能按钮在哪,后来发现主要操作都集中在顶部功能区。 工作窗口主要…

2026/6/30 0:02:58阅读更多 →
XGBoost超参数实战:从理论到调优策略

XGBoost超参数实战:从理论到调优策略

1. XGBoost超参数基础认知 第一次接触XGBoost时,我被它那密密麻麻的参数列表吓到了。这感觉就像面对一架波音747的驾驶舱——每个按钮都可能有神奇的效果,但按错了就可能坠机。经过多年实战,我发现其实掌握十几个核心参数就能解决90%的问题。…

2026/6/30 0:02:59阅读更多 →