質問: p->bw * 10000.0 / (p->bl * p->bl); return 0; } ``` こんにちは。今とある本でC言語を勉強しているのですが、ポインタで分からないことがるので教えて下さい。 わからないのは、ソースの氏名~BMIのところで氏名とBMIだけ&が付かなくて他のは「例えば&p->age」のように&が付くことです。&が付かないのはなぜですか?
回答: こんにちは。 scanf()で指定している`p->age`等には`&`が付くのに、`p->bmi = ...;`の`p->bmi`に`&`が付かないのはなぜ?ってことですね? &は&の右側にある変数へのポインタを返す単項演算子です。 `&p->age`とするとageメンバ変数へのポインタになります。scanf()で値を変数に読み込むためには変数の値ではなく、変数へのポインタを渡す必要があるので`&`を付けます。 `p->bmi = ...;`の場合は、左辺に指定した変数へ右辺値を設定する構文ですから、態々`&`を付ける必要はないですし、逆に付けると意味か変わるので付けては行けません。