• ベストアンサー

構造体ポインタで構造体全体を参照 [C言語]

構造体へのポインタで参照先の構造体全体を参照するには *構造体ポインタ名 でいいでしょうか?これで構造体同士の値のコピーはできるみたいなのですが、printfで*構造体名を表示すると参照先の構造体と値が違ってきてしまいます。 printf("*pkou=%d,kou=%d",*pkou,kou); //pkouは構造体kouへのポインタ 《結果》 *pkou=-23135123,kou=1257234 (値は適当ですがこんな感じです) 友人へ「"*構造体ポインタ名"とすると参照先の構造体全体を表している」と言ってしまっていいでしょうか。回答よろしくお願いします。

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

  • ベストアンサー
  • prophetok
  • ベストアンサー率44% (13/29)
回答No.1

「"*構造体ポインタ名"とすると参照先の構造体全体を表している」 こまかい言い回しは別にして、間違いでない。 printf("*pkou=%d,kou=%d",*pkou,kou); //pkouは構造体kouへのポインタ 《結果》 *pkou=-23135123,kou=1257234 (値は適当ですがこんな感じです) これはあたりまえ、 数字でない*pkou,kouを、数字として出力しようとしているので何が出力されるかは開けてのお楽しみ。 メンバーを出力したいのならその構造体用の関数を用意すべき

noname#113783
質問者

お礼

>>これはあたりまえ、 あそうか!そう言われてみれば構造体は値が詰めて代入されるわけじゃないんでしたっけ・・・。 回答ありがとうございました!友人にはそういいます。

その他の回答 (2)

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

>>>これはあたりまえ、 >あそうか!そう言われてみれば構造体は値が詰めて代入されるわけじゃないんでしたっけ・・・。 #1さんが「あたりまえ」と書かれたのと 「構造体のメンバー間にはパディングがある」という話は、 別のことです。何も関係ありません。

noname#113783
質問者

お礼

あ、そうなんですか!独学は勘違いが多くて怖いです・・・ 回答ありがとうございました!

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.2

typedef struct {  int a;  int b; } TEST; TEST kou, *pkou; pkou = &kou; kou.a = 1; kou.b = 2; printf("*pkou=(%d,%d)、kou=(%d,%d)",  pkou->a, pkou->b,  kou.a, kou.b); という感じにしないとね 結果はa,bの値がpkouとkouで同じ。 構造体そのものを指定するのはお門違いです。。 指定するとすればアドレス値を示す'%p'でないとダメだよ printf("pkou=%p, &kou=%p", pkou, &kou);

noname#113783
質問者

お礼

>>構造体そのものを指定するのはお門違いです。。 そうですね。構造体全体の値を使う機会なんてありませんもんね。 でも構造体全体が違ってもメンバ参照すると値が同じなのは不思議ですね~ 回答ありがとうございました!

関連するQ&A