プログラミング

C言語での構造体のメンバと ->(アロー)演算子について説明する

C言語を学んでいて、構造体メンバにアクセスするための->演算子(アロー)について、自分のためにも備忘録がてら説明します。

今回のコードでは、架空の人物として「さとし」と「なおみ」が登場します。

さとしは、彼女がいないくせに理想が高くDカップ以上でない女の子にはあまり興味はありません。
毎日学校にいる間もエロいことばかり考えていたさとしくんは、ある時自分が超能力を持つことに気づいてしまいました。

さとしくんは、気になった女の子がDカップ以上じゃないと、その女の子をDカップにすることができます。
また、さとしはぽっちゃりが好きですが、デブは嫌いなので、その子が70kg以上なら60kgに変えてしまいます。

春から同じクラスのなおみさんが気になるさとしくんは今日、彼女を自分の理想に近づけようとしています。

以下がコードになります。

関数satoshiは、カップと体重を直接書き換える必要があるので、引数として構造体のポインタを受け取ります。
そのため、satoshiの引数は(struct girls *girl)となっています。

この関数satoshiこそ、さとしの超能力です。

関数satoshiが仮引数girlに受け取るのは、なおみのデータを格納している構造体オブジェクトnaomi を指すポインタです。

ポインタに間接演算子*を適用すれば、そのポインタが指すオブジェクトの実体を表すので、*girlはnaomiのエイリアスです。
エイリアスとは、ここではオブジェクトの実体を別の名前で参照するためのシンボルといった感じでとらえてください。

このコードでは最初から->演算子を使っていますが、

(*girl).gap_bust

のように変えることができます。

しかし、上の書き方は()を書かないといけないし面倒です。

よって->を使ったほうが簡潔です。
girlが指す構造体オブジェクトのメンバ(中の要素)は、以下の式で表します。

girl->gap_bust      /* (*girl).gap_bust のこと*/

.(ドット)演算子と->演算子の総称をメンバアクセス演算子といいます。

 

以上アロー演算子の説明でした。参考にさせていただいた書籍は、「新・明解C言語入門編」です。

僕自身C言語の初心者なので、間違っているところがあれば指摘してもらえると嬉しいです。

では。