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

再议指针变量和普通变量

最近我在看stm32单片机的freeRTOS内核源码程序里面使用了大量链表、结构体、结构体指针变量等随着看代码越来越多对指针变量尤其是结构体指针变量访问结构体成员有了一些新的认识现在记录下来。uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait ) { uint32_t ulReturn; taskENTER_CRITICAL(); { /* Only block if the notification count is not already non-zero. */ if( pxCurrentTCB-ulNotifiedValue 0UL ) { /* Mark this task as waiting for a notification. */ pxCurrentTCB-ucNotifyState taskWAITING_NOTIFICATION; if( xTicksToWait ( TickType_t ) 0 ) { prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE ); traceTASK_NOTIFY_TAKE_BLOCK(); /* All ports are written to allow a yield in a critical section (some will yield immediately, others wait until the critical section exits) - but it is not something that application code should ever do. */ portYIELD_WITHIN_API(); } else { mtCOVERAGE_TEST_MARKER(); } } else { mtCOVERAGE_TEST_MARKER(); } } taskEXIT_CRITICAL(); taskENTER_CRITICAL(); { traceTASK_NOTIFY_TAKE(); ulReturn pxCurrentTCB-ulNotifiedValue; if( ulReturn ! 0UL ) { if( xClearCountOnExit ! pdFALSE ) { pxCurrentTCB-ulNotifiedValue 0UL; } else { pxCurrentTCB-ulNotifiedValue ulReturn - 1; } } else { mtCOVERAGE_TEST_MARKER(); } pxCurrentTCB-ucNotifyState taskNOT_WAITING_NOTIFICATION; } taskEXIT_CRITICAL(); return ulReturn; }1一个函数内部的变量可以分为两大类普通变量指针变量。无论一个变量多么复杂都是属于这两大类中的一个。2指针变量的尝试就是存储某个变量的地址它的目的是为了访问实现读写操作目的变量提供一个“起始索引”。这里着重强调一些“起始索引”的含义类比想顺着一条线团来找仓库中一个事物无论需要寻找的事物在哪里多么难找都可以通过这个“起始索引”对应的线团线头捋着找到。3再次理解结构体指针变量访问结构体内部成员的运算符“-”以及结构体变量变量名访问内部成员的运算符“.”;这两个运算符都是双目运算符也就是这2个运算符前后都有变量。从空间上考虑-运算符首先就有2中提到的“起始索引”的含义汉语翻译为“指向”通过这个“起始索引”一条条找到对应结构体成员然后去访问它结构体成员变量与指针变量在“空间”上是不在一起的物理上不相邻可能隔着十万八千里但是通过指针变量加上运算符“-”就是能轻松找到而且计算机非常擅长这种寻址操作。通过结构体变量加上运算符“.”再加上成员变量名就可以访问内部成员结构体变量和内部成员变量在空间物理上是相邻的而且还是包含关系因此运算符“.”往往汉语翻译成“的”。结构体变量的结构体成员。运算符“.”前后都是普通变量。4三大结构顺序、选择、循环。函数内部从宏观上是属于顺序结构的局部是有小顺序、选择、循环组成的顺序结构式最重要最基本的结构之所以局部使用了选择是因为触发判断某些语句需要当某些条件满足的时候才顺序执行当某些条件不满足的时候就不执行或者条件判断当满足条件一顺序执行代码段1当满足条件二顺序执行代码2....。局部使用循环是因为某些语句需要循环执行多次次数循环或者某些语句需要条件循环多次条件循环顺序、选择、循环都是与自然中法则是对应的自然界也是分为这三种结构。
http://www.gsyq.cn/news/1330412.html

相关文章:

  • 谐振电路分析
  • 【Perplexity词汇查询功能深度解密】:20年NLP专家亲授3大隐藏技巧,90%用户从未用过的高效查词法
  • Perplexity搜索结果突然失准?三类隐性偏见陷阱正在吞噬你的决策质量(附MIT媒体实验室2024最新评估报告)
  • 2026年宁波短视频代运营哪家靠谱:本地获客转化完全指南 - 优质企业观察收录
  • 2026佛山市顺德区黄金回收铂金回收白银回收深度实测 五大正规门店横屏 报价透明 免费上门才是真靠谱 - 亦辰小黄鸭
  • 告别软件模拟!用STM32硬件IIC驱动OLED,U8g2库移植保姆级教程(Keil+STM32CubeMX)
  • 仅剩最后47份!《Midjourney概念艺术创作密钥手册》(含23个受版权保护的材质编码+动态光照参数表)
  • 如何在5分钟内掌握VSCode Mermaid图表实时预览:开发者终极指南
  • SoM嵌入式开发实战:从选型到量产的全流程解析
  • 2026桂林市雁山区黄金回收铂金回收白银回收深度实测 五大正规门店横屏 报价透明 免费上门才是真靠谱 - 亦辰小黄鸭
  • 解密B站缓存转换:m4s-converter让你的珍藏视频永不丢失
  • 2026海口市龙华区黄金回收铂金回收白银回收深度实测 五大正规门店横屏 报价透明 免费上门才是真靠谱 - 亦辰小黄鸭
  • 经典的网格寻路问题实例分析
  • 别只盯着S21!用ADS仿真LNA时,这3个容易被忽略的细节(稳定性、实际元件模型、噪声圆)才是成败关键
  • 别再折腾gcc版本了!Ubuntu 20.04下用Docker一键搞定OLLVM编译环境
  • Python跨平台应用开发终极指南:用Flet框架轻松构建桌面、移动和Web应用
  • Translumo:Windows平台的开源实时屏幕翻译解决方案
  • D13X调试全攻略:从BROM到应用
  • 2026海口市琼山区黄金回收铂金回收白银回收深度实测 五大正规门店横屏 报价透明 免费上门才是真靠谱 - 亦辰小黄鸭
  • 用C++和Eigen手撸一个MINCO轨迹优化器:从论文公式到可运行代码的保姆级拆解
  • 2026福州市马尾区黄金回收铂金回收白银回收深度实测 五大正规门店横屏 报价透明 免费上门才是真靠谱 - 亦辰小黄鸭
  • 为什么触发了系统OOM而没触发JVM OOM
  • G-Helper全面升级:华硕笔记本轻量化智能控制完整指南
  • 从水下机器人到你的桌面:我是如何用WSL2+北通XBOX手柄搞定硬件控制的
  • Turborepo最佳实践:构建高性能Monorepo架构
  • OpenCV实战:用Python和Hough变换5分钟搞定图片中的直线和圆检测
  • NVM安装后npm命令无效?手把手教你排查Windows环境变量与路径配置的常见坑
  • CTF新手必看:手把手教你破解BUUCTF那道‘从娃娃抓起’的汉字编码题(附完整电码/五笔对照表)
  • 别再为高维数据发愁了!用R语言glmnet包5步搞定LASSO回归变量筛选
  • 别再只会用BurpSuite了!用Kali Linux的SEToolkit复现一次真实的钓鱼攻击(附完整命令与截图)