- ベストアンサー
構造体のポインタに関する質問
- 構造体のポインタに関する質問です。
- 構造体の中にポインタ変数を置いた場合に、代入時にエラーが発生しています。
- エラーの解決方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こう書けばよいです。 *members.pstack=*pushdeta;
その他の回答 (3)
- FM-8
- ベストアンサー率39% (65/164)
#1様のご回答が正解だと思います. ポインタというのは,アドレスです. ポインタの持っている値というのは,アドレス値です. そして,アドレスの指し示す場所(アドレス)のデータを書き換えることもできます. pをポインタとすると, p=p1; // pのアドレス値をp1といアドレス値に書き換える. *p=*p1; //pのアドレスのメモリの値を,p1のアドレスのメモリの値で書き換える. この2つは,違った効果を生み出します. ポインタへの代入をしたいのでしたら, members.pstack=pushdeta; ですが,pstackの指し示すデータ値を書き換えたいのなら, *(members.pstack)=*pushdeta; ですね. 私も,ポインタの使い方にはあまり自信が有りません. いろいろやってみて,デバッガで値を表示して見たりして,自分で確認していくしかないと思います. C++のことは,分かりません.
- tomorot
- ベストアンサー率47% (16/34)
ポインタ変数の使いかた自体が間違ってますよ。 構造体のメンバだろうが、普通のポインタ変数だろうが、使い方は一緒です。 int型へのポインタで説明すると、 int *pInt; /* int型へのポインタ変数 */ int intA; /* int型の変数 */ pInt = &intA; /* ポインタに、変数のアドレスを設定 */ *pInt = 0; /* ポインタ変数を通じてそのアドレスが示す変数(intA)に0を代入 */ 例示の構造体ならば、pushdetaがint型の変数だと仮定して、 members.pstack = &pushdeta; でpstaskに変数のアドレスを設定。 members.*pstack で、ポインタの先の変数の値を操作できます。 ちなみに、 members.pstack=pushdeta; だと、pushdetaの内容番地のポインタ変数になるだけで、文法エラーではないですね。
- terra5
- ベストアンサー率34% (574/1662)
pushdetaの型が書いてないので正確にはわかりませんが、 members.pstack=pushdeta; になるように思いますが。 >(*を取れば、エラーは出ない) と同じなら、文法的にこれが正しいからで、文法的には解決したことになりますが、 そもそも何がやりたいかによってプログラムとして正しいかどうかは変わりますので、これだけの情報では解決方法はわかりません。 あとスペルがpushdetaでなくpushudataのような気がしますが。