【C言語】
構造体ポインタとアロー演算子

アロー演算子 構造体ポインタ 間接演算子

■ポインタを使わないメンバの参照

#include <stdio.h>
typedef struct {
    int     R赤;
    int     G緑;
    int     B青;
} 構造体枠_t;

//構造体変数の宣言と初期化 
構造体枠_t  構造体変数三原色 ={
    .R赤 = 0x10,
    .G緑 = 0x20,
    .B青 = 0x30
};
int main(void){
    printf("R = %02x\n",構造体変数三原色.R赤);
    printf("G = %02x\n",構造体変数三原色.G緑);
    printf("B = %02x\n",構造体変数三原色.B青);
}

■構造体ポインタとアロー演算子ー>(推奨)

#include <stdio.h>
typedef struct {
    int     R赤;
    int     G緑;
    int     B青;
} 構造体枠_t;

//構造体変数の宣言と初期化 
構造体枠_t  構造体変数三原色 ={
    .R赤 = 0x10,
    .G緑 = 0x20,
    .B青 = 0x30
};
int main(void){
    構造体枠_t  *ptr = &構造体変数三原色;
    printf("R = %02x\n",ptr->B青);
    printf("G = %02x\n",ptr->G緑);
    printf("B = %02x\n",ptr->B青);
}

「構造体ポインタptrの指す先のメンバB青」と
自然に読めるので
通常このスタイルが使われます。


構造体ポインタと間接演算子 *(非推奨)

#include <stdio.h>
typedef struct {
    int     R赤;
    int     G緑;
    int     B青;
} 構造体枠_t;

//構造体変数の宣言と初期化 
構造体枠_t  構造体変数三原色 ={
    .R赤 = 0x10,
    .G緑 = 0x20,
    .B青 = 0x30
};
int main(void){
    構造体枠_t  *ptr = &構造体変数三原色;
    printf("R = %02x\n",(*ptr).R赤);
    printf("G = %02x\n",(*ptr).G緑);
    printf("B = %02x\n",(*ptr).B青);
}

読みにくいのでこのスタイルは通常使用されません。