読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

C言語の構造体を参照する方法について

今回は、今まで適当に扱っていた構造体に対するメモです。
間違った箇所があったら、コメントを頂けると幸いです。

typedef struct
{
  char addr;
  char dataLength;
} wap_pcb_t;

static wap_pcb_t pcb; 

関数内部やら、グローバル変数やらにアクセスする場合は

pcb.addr = 0xff;

といった具合です。

一方、引数として構造体ポインタを使う場合は
間接参照演算子”->”を使って要素を参照します。

void sampleFunc(wap_pcb_t *pcb) {
...
pcb->addr = 0xff;
...
}

別の書き方としては

void sampleFunc(wap_pcb_t *pcb) {
...
(*pcb).addr = 0xff;
...
}

てなのもあるようです。
値の代入というケースでは、前者は見間違いを起こす可能性がありますね……
Ruby使いとしてはドットで繋がる後者の方を使っていったほうが良いのかも知れません。

なお、構造体ポインタ型の関数を使うとRubyのattr_readerのようなものを作ることもできます。

wap_pcb_t *wap_pcb_get() {
  return &pcb;
}

wap_pcb_t *pcb = wap_pcb_get();
(*pcb).addr = 0xff;

という感じで、staticな構造体にもアクセスする事ができます。

�\����