C/C++ 中访问结构体成员的方法

先看例子:
1#include

2void main(){

3 typedef struct {

4 int int_field;

5 char char_field;

6 } my_struct;



7 my_struct my_s;

8my_s.int_field=3; //结构运算符访问结构成员

9 my_struct *s;

10 s=(my_struct *)malloc (sizeof(my_struct));

11 s->int_field=4;

12s->char_field='a';

13 (*s).int_field=6;

14 }

访问结构体成员的运算符有两种,一种是“.”即结构运算符,另一种是“->”即结构指针运算符。

结构运算符是通过结构变量名访问结构体成员的(例如例子的第8行),而结构指针运算符是通过指向结构的指针访问结构成员的(例如第11及12行)。

还可以用指针和结构运算符来访问结构(如第13行),其中(*s)中的圆括号不可以省去

平时看简单例子看惯的缘故,本来以为很简单的知识。可是正到了项目上遇到了就有中把握不住的感觉,还是由于看的少的原因,所以不要只停留在理论的基础上。还是看项目源代码:

。。。。

。。。。

1. enum {

LIGHT_INDEX_BACKLIGHT = 0,

LIGHT_INDEX_KEYBOARD = 1,

LIGHT_INDEX_BUTTONS = 2,

LIGHT_INDEX_BATTERY = 3,

LIGHT_INDEX_NOTIFICATIONS = 4,

LIGHT_INDEX_ATTENTION = 5,

LIGHT_INDEX_BLUETOOTH = 6,

LIGHT_INDEX_WIFI = 7,

LIGHT_COUNT

};



2. struct Devices {

light_device_t* lights[LIGHT_COUNT];

};



。 。 。

。 。 。

static jint init_native(JNIEnv env, jobject clazz)

{

int err;

hw_module_t
module;

Devices devices;



devices = (Devices
)malloc(sizeof(Devices));



err = hw_get_module(LIGHTS_HARDWARE_MODULE_ID, (hw_module_t const**)&module);

if (err == 0) {

3. devices->lights[LIGHT_INDEX_BACKLIGHT]

= get_device(module, LIGHT_ID_BACKLIGHT);

devices->lights[LIGHT_INDEX_KEYBOARD]

= get_device(module, LIGHT_ID_KEYBOARD);

devices->lights[LIGHT_INDEX_BUTTONS]

= get_device(module, LIGHT_ID_BUTTONS);

。 。 。

。 。 。

}

}



其中1 2 两处在上一篇 “C 中枚举(项目里遇到的)例子“ 中介绍过了。 3处 devices 是一个指向Devices型(结构体)的指针,devices->lights[LIGHT_INDEX_BACKLIGHT]即是访问到了Devices成员lights的第一个元素。

也无非就这么三种用法,熟悉了以后项目再遇到就很简单!
原文链接: https://www.cnblogs.com/zsw-1993/archive/2013/02/21/4880375.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/78590

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午6:35
下一篇 2023年2月9日 下午6:35

相关推荐