- ベストアンサー
構造体のメンバへアクセス
VC++(VS2008)の勉強中です。 構造体のメンバへアクセスするとき、例えば stInfo.val=100 ; というように「.」で指定する場合と、 int i = stInfo->val ; というように「->」で指定する場合がありますが、この使い分けは どういうことになっているのでしょうか? (適当に指定するとビルドエラーになります。)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>(適当に指定するとビルドエラーになります。) そりゃそうですよね。 > stInfo.val=100 ; stInfoが、構造体の実体である場合です(※)。 > int i = stInfo->val ; stInfoが、構造体を指すポインタである場合です。 この場合、当該構造体の実体は (*stInfo) です。 よって、(※)の場合と同様に、(*stInfo).val という書き方で メンバー val にアクセスできます。 (*stInfo).val を簡略化したのが、アロー演算子を使った stInfo->val という書き方です。
その他の回答 (2)
- vipasigaru
- ベストアンサー率38% (16/42)
実際はこんな感じ 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);// ポインタから要素にアクセスするときは->
お礼
丁寧にサンプルコードまで、ありがとうございました。
- himajin100000
- ベストアンサー率54% (1660/3060)
http://msdn.microsoft.com/en-us/library/b930c881%28VS.80%29.aspx x->y 演算子はポインタxが指すアドレスにある構造体のメンバyです。 したがってx->yは(*x).yと同じです。
お礼
理解しました。 ありがとうございました。
お礼
なるほどです。 ありがとうございました。