先看例子: 



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

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