• ベストアンサー

構造体のメンバへアクセス

VC++(VS2008)の勉強中です。 構造体のメンバへアクセスするとき、例えば  stInfo.val=100 ; というように「.」で指定する場合と、  int i = stInfo->val ; というように「->」で指定する場合がありますが、この使い分けは どういうことになっているのでしょうか? (適当に指定するとビルドエラーになります。)

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

>(適当に指定するとビルドエラーになります。) そりゃそうですよね。 > stInfo.val=100 ; stInfoが、構造体の実体である場合です(※)。 > int i = stInfo->val ; stInfoが、構造体を指すポインタである場合です。 この場合、当該構造体の実体は (*stInfo) です。 よって、(※)の場合と同様に、(*stInfo).val という書き方で メンバー val にアクセスできます。 (*stInfo).val を簡略化したのが、アロー演算子を使った stInfo->val という書き方です。

zbatno1
質問者

お礼

なるほどです。 ありがとうございました。

その他の回答 (2)

回答No.3

実際はこんな感じ typedef struct{ int a; char b; } ST_TEST; (略) ST_TEST stInfo;// 構造体 ST_TEST* pstInfo = &stInfo;// 構造体のポインタ (略) printf("stInfo = %d\n",stInfo.a);// 構造体から要素にアクセスするときは. //printf("stInfo = %d\n", stInfo->a);// エラー //printf("stInfo = %d\n", pstInfo.a);// エラー printf("pstInfo = %d\n", pstInfo->a);// ポインタから要素にアクセスするときは->

zbatno1
質問者

お礼

丁寧にサンプルコードまで、ありがとうございました。

回答No.1

http://msdn.microsoft.com/en-us/library/b930c881%28VS.80%29.aspx x->y 演算子はポインタxが指すアドレスにある構造体のメンバyです。 したがってx->yは(*x).yと同じです。

zbatno1
質問者

お礼

理解しました。 ありがとうございました。

関連するQ&A