news 2026/5/16 22:23:36

C语言指针变量和函数调用的“超链接”属性

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言指针变量和函数调用的“超链接”属性

(1)指针变量和函数调用的“超链接”属性。

最近,我在看linux内核源码,里面使用到了大量的指针变量和函数调用。现在从类比的思想讨论一下指针变量和指向的真实变量,函数调用和函数定义它们之间的关系。

首先,所有的指针变量都占4个字节指向了可以是一个非常复杂的变量;函数调用就是一行代码,跳出去执行的函数可能有很多行代码,函数体内部能够实现很复杂的功能。从类比的思想看,两者有相似性,函数名其实就是函数代码段的起始地址,函数调用起始从深层角度看也可以看做一个函数指针去解引用访问函数。

那么,从类比角度看,我们比较熟悉的什么实物有这样的特性呢?

答:我能想到的就是“超链接”,超链接的物体可能是一段字符、一个图标等非常简单的实物,当我们建立超链接后,打开超链接后可能是另外一个非常负责的实物,例如一整个网页。

刚开始的需要创建超链接的实物对应的就是定义一个指针变量,此时这个指针变量处于注销状态;

创建超链接,对应的就是给指针变量写入有效数值,给唯一固定下来,这个指针变量处于了激活状态;

通过超链接去访问其他复杂实物,对应的就是通过指针变量去读写访问指向变量或者变量内部的成员,指针变量处于“运行态”。

因为函数名本身对应的地址就是唯一的,所以函数访问的过程只有第一、三两步,函数名是只读的,不能写操作。

(2)从“注销态”、“激活态”、“运行态”三种状态考虑变量、函数的状态。

《1》定义一个函数或者一个普通变量、一个指针变量,这个时候三者相当于处于“注销态”。

《2》给“普通变量”或者“指针变量”写入有效数值,这个时候两者处于“激活态”。

《3》对“普通变量”进行读访问、或者指针变量去读写访问指向的真正变量,或者函数调用,这个时候三者处于“运行态”。

(3)既然寄存器是硬件操作那个的接口,我们只需要操作那个寄存器就可以实现功能了,为什么还要定义一些全局变量、堆变量、临时栈变量呢?

因为寄存器的种类、数量、功能都是不变的,操纵这些寄存器的函数其实就是驱动程序,一个完整的程序是由2部分组成的(简单分类)应用程序和驱动程序,驱动程序只需要操纵这些寄存器就可以了,但是应用程序与具体的业务需求有关,不是一成不变的,这就用到了内存,内存就是一个一个被编码的字节格子,我们将与应用程序相关联的事物抽象成具有特定类型的变量(或者用各种类型去描述事物,有自定义类型例如结构体、数组、枚举等,也有原生类型)并暂时存储在内存中,应用程序其实就是要操纵这些应用变量。应用程序去调用驱动程序来操纵硬件外设工作。驱动程序就是将寄存器的位操作封装打包成能够被应用程序访问对接的程序,驱动程序既有纯硬件操作寄存器的特性,又有一部分应用程序的简单特点,因为它提供了参数列表和返回值,能够为应用程序提供简单服务。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 3:31:23

YOLO11图像增强功能实测:mosaic、hsv等提升泛化能力

YOLO11图像增强功能实测:mosaic、hsv等提升泛化能力 在实际目标检测项目中,我们常遇到训练数据量少、样本单一、光照变化大、目标尺度差异明显等问题。这些问题直接导致模型在真实场景中泛化能力弱——训练时表现不错,一到新环境就“水土不服…

作者头像 李华
网站建设 2026/5/9 19:18:41

cv_resnet18_ocr-detection + GPU:高效OCR推理部署教程

cv_resnet18_ocr-detection GPU:高效OCR推理部署教程 1. 为什么这个OCR检测模型值得你花10分钟上手 你是不是也遇到过这些场景: 扫描合同、发票、证件,想快速提取文字,但用在线工具要上传到第三方服务器,担心隐私泄…

作者头像 李华
网站建设 2026/5/10 4:38:25

如何突破设备限制:Sunshine实现无缝专业级游戏串流体验

如何突破设备限制:Sunshine实现无缝专业级游戏串流体验 【免费下载链接】Sunshine Sunshine: Sunshine是一个自托管的游戏流媒体服务器,支持通过Moonlight在各种设备上进行低延迟的游戏串流。 项目地址: https://gitcode.com/GitHub_Trending/su/Sunsh…

作者头像 李华
网站建设 2026/5/16 11:13:29

网盘提速工具新手入门:直连下载技术应用指南

网盘提速工具新手入门:直连下载技术应用指南 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否曾遇到网盘下载速度缓慢的问题?是否因等待大文件传输而影响工作效率&#xff…

作者头像 李华
网站建设 2026/5/16 12:46:41

为什么推荐用ms-swift做Qwen2.5-7B微调?实际体验告诉你

为什么推荐用ms-swift做Qwen2.5-7B微调?实际体验告诉你 你是不是也遇到过这些情况:想给大模型注入专属身份,却发现微调环境搭建复杂、显存不够、参数调不好;试了几个框架,不是报错就是跑不起来;好不容易跑…

作者头像 李华
网站建设 2026/5/16 12:45:48

cv_resnet18_ocr-detection输出目录结构:时间戳命名规则详解

cv_resnet18_ocr-detection 输出目录结构:时间戳命名规则详解 OCR 文字检测不是只看识别准不准,更要看结果好不好找、能不能复现、后续怎么用。而这一切的起点,往往就藏在那个看似普通的输出文件夹名里——比如 outputs_20260105143022。你可…

作者头像 李华