资讯动态

论述数据成员变量访问方式

发布时间:2026/10/18 6:40:07 来源:尧图企业网站定制
我们都知道数组和结构体类型为c语言中的自定义类型用自定义类型定义的变量其实都类似于“一个包裹”真正有意义的就是里面的成员c语言数据处理就是对数组和结构体变量里面的成员进行“读写”访问。数组变量成员和结构体变量成员的访问从访问方式上看c语言都定义了专门运算符来支撑数组成员使用符号[]也就是a[i]结构体成员变量使用符号“.”也就是struct1.member的方式进行访问。结构体成员变量还可以使用一种名为“间接访问”的方式进行访问而且c语言专门定义了一个运算符“-”来实现。间接访问的意思就是“借助指针地址常量偏移量”或者“指针变量偏移量”的方式实现。数组成员访问相对的c语言没有定义对应运算符。结构体成员变量访问需要用到运算符“结构体指针变量常量-成员变量名”的方式实现结构体成员变量访问也比较直接而且运算符“-”避免了我们程序员自己计算偏移量的麻烦简直是对我们程序员的造福。除了使用运算符“[]”完成数组成员的访问之外还可以使用“指针解引用”的方式实现a[i]其实是*(pi)完成同一个数组成员访问的一种“语法糖”在c语言编程过程中两者是等效的并且都有使用今天我们看的例子是以第二种指针索引值解引用方式实现。值得注意的是*(pi)访问成员变量也利用c语言指针变量偏移的本质需要移动真正变量大小的内存。因此c语言在设计的时候已经都规定好了因此*(pi)访问数组成员也不需要程序员自己计算真正偏移多少十分方便。在编译阶段编译器就自动计算好了。我们来看一个例子首先我们要知道一个前提一个变量无论是静态全局变量、动态局部变量、动态堆内存变量要想有意义最起码要有至少一次写入有效数值并一次读操作否则没有任何意义。静态全局变量定义uint8_t tab_1024[1024] {0};静态全局变量写读操作首先要写入有效数据然后再读取否则数据是错误或者脏的没有任何意义还可能导致意想不到的错误。定义了一个全局变量数组数组成员进行读写访问没有直接使用运算符“[]”而且在函数Ymodem_Receive()中实现里面使用了memcpy()函数利用了第二种“*(pi)”指针变量索引值解引用的方式吸入有效数据。函数Ymodem_Receive()中借助了一个uint32_t类型的普通全局变量RamSource通过自己计算偏移量得到地址值然后强制类型转换成指针最后再以解引用的方式的方式实现了数组成员变量读操作具体过程请详看上图函数。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑