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

先看例子: 

    1#include <stdio.h>

    2void main(){

    3    typedef struct {
    4     int int_field; 
    5     char char_field;

    6   } my_struct;


    7    my_struct my_s;

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

    9    my_struct *s;

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

    11    s->int_field=4;

    12    s->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的第一个元素。

      也无非就这么三种用法,熟悉了以后项目再遇到就很简单!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值