当前位置: 首页 > news >正文

c语言结构体相关箭头运算符和点号运算符的联系以及c语言的“索引”思想

最近,我在看linux的内核源码,里面使用大量的结构体类型定义、结构体类型变量定义、结构体指针变量、结构体内部成员等元素。其中,大量使用了结构体指针变量访问结构体内部成员的“箭头运算符->”,以及使用结构体变量名访问结构体内部成员的“点号运算符.”。两者的相似点:都是实现了结构体变量内部成员的读写访问。不知道大家有没有这样的疑问,利用指针变量解引用符号“*”和“点号”运算符就能实现结构体变量内部成员的读写访问,为什么还要发明一个“箭头符号->”呢?

也就是说:

p->member;不是应该写成(*p).member吗,为什么还要发明箭头运算符“->”呢?

答案:

(1)p->member等效于(*p).member,两者是完全一致的,也就说箭头运算符->等效于解引用+点号运算符

(2)c语言之所以发明“->”箭头运算法是为了让代码看以来更简便,更易读,避免了括号()加解引用运算符(*)的使用繁琐。

(3)箭头运算符“->”本身就有指针指向的含义,左侧的变量值表示首地址,右侧的变量表示要访问的结构体成员变量,“箭头运算法”本身代表“指针(地址)寻址思想”。点号运算符“.”在汉语中有“的”含义,本身符合结构体这个大内存格子变量内部包含小内存格子结构体成员的含义,点号运算符左侧的变量为结构体变量,点号运算符右侧的变量为结构体成员变量,“点号运算符”本身代表父与子的关系。

扩展:暗含的索引思想

p->member;

str.member;

以上两种方式都是实现了结构体变量内部成员的读写访问,都暗含了一个非常重要的变成思维就是“线索或者索引”的概念。

无论是多么复杂的数据结构,都是从结构体的地址(其实暗含了结构体首元素的首地址,双首地址思想)为起始开始的。也就是俗称的“从头开始捋清楚”。只要是找到了这个地址“线头”就可以一步步使用“箭头运算法”或者“单号运算符”完成结构体内部成员的访问。

这种情况尤其是父结构体内部包含子结构体,子结构体又包含孙结构体, ...的情况,无论包含多少层结构体,都是从最外层父结构体或者结构体指针开始像“剥洋葱”一样一层一层的倒找内部成员,也暗含了“无法从内部结构体开始为“线索”实现结构体内部成员的访问”。

http://www.jsqmd.com/news/548382/

相关文章:

  • vuepress博客安装与使用(保姆教学)
  • 打造个性化开源光标:GitHub加速计划apple_cursor全攻略
  • 破解PPAP“效率黑洞”:为SQE团队卸下重负,释放高价值产能
  • Unsortedbin attack:
  • 空客A320飞行模拟器赋能高校实验室建设
  • OpenClaw夜间任务优化:百川2-13B-4bits量化模型在低功耗模式下的稳定性测试
  • PX4的follow_me模式隐藏技巧:如何用_target_position_offset实现平滑跟随
  • DanKoe 视频笔记:如何在7天内重置你的生活:概述与核心概念
  • GetQzonehistory:5分钟快速备份QQ空间历史说说的终极指南
  • 面向 Context 编程
  • OWL ADVENTURE与Git协作:AI视觉项目的版本管理与团队开发实践
  • bench.sh vs 其他Linux性能测试工具:实测对比与选型建议
  • 解决魔兽争霸3现代系统兼容性问题的优化方案
  • Wan2.1视频生成案例分享:从萌宠到科幻,AI视频作品集
  • VuGen录制脚本全流程详解
  • 实战LangChain4j集成MCP Server:让Java AI应用具备工具调用能力
  • nli-distilroberta-base算法优化:利用LSTM思想增强序列上下文建模
  • 终极指南:如何用jcifs-ng快速实现Java SMB客户端开发
  • MusePublic Art Studio惊艳效果:动态种子演化生成同主题12张连贯艺术组图
  • 第二十四篇:【硬件工程师筑基系列 5-3】PCB 布局核心规则与实战 | 布局定生死,新手也能做出高性能布局
  • Qwen3-Embedding-4B代码实战:用Python快速验证向量生成
  • 收藏!小白程序员必备:从零入门大模型,抢占职场新风口(含学习资源包)
  • SillyTavern角色系统全面解析:打造个性化AI交互体验
  • 百考通:AI赋能让学术研究起步更高效
  • 别再空谈概念了!用ESP32和TensorFlow Lite,手把手教你做个能“思考”的智能垃圾桶(附完整代码)
  • MATLAB六自由度齿轮弯扭耦合动力学代码:含时变啮合刚度、齿侧间隙的振动分析与数值计算
  • FindSomething浏览器插件:3步实现网页敏感信息自动检测
  • mPLUG-Owl3-2B多模态交互工具效果展示:高精度图像理解+自然语言问答真实案例
  • SDMatte在智能硬件配套:嵌入式设备端Web服务裁剪、ARM64交叉编译与内存精简
  • SourceTree克隆失败:如何快速解决无效源路径/URL问题