• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語 構造体へのポインタ 値を変化させず出力)

C言語 構造体へのポインタ 値を変化させず出力

このQ&Aのポイント
  • C言語で構造体へのポインタを使用して、値を変化させずに出力する方法について悩んでいます。
  • プログラムを実行すると、戦わせた後の体重が変化してしまい、元の値が出力されません。
  • ポインタを別で定義してもうまくいかず、値を変えずに出力する方法を知りたいです。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

ポインタを通して操作する、ということは、その指し示す実体を操作することと同じです。 現在のプログラムでは、初期値として用意したデータ(Mdcl_Chk)を直接変更しています。 ポインタを新しく用意したところで、その指し示す先は一つですから同じことです。 方法としては、 ・OFF,DEFはポインタではなく構造体そのものとして宣言。 OFF=Mdcl_Chk[i]; DEF=Mdcl_Chk[i^0x00000001]; とすると、それぞれのコピーが作られるので、Mdcl_Chk自体は変更されない。 # このようなコピーのとき、要素にポインタがあるとややこしいのですが、今回の場合は大丈夫です。 # 詳しく知りたい場合は「浅いコピー」「深いコピー」で検索。 ポインタでないので、そのあとの->は.に変更。 ・「現在値」と「初期値」を分ける。 RPG等でよく「MAX HP」と「HP」があるのを見かけると思います。あの要領です。 struct mdcl_chk自体に現在値を保存する要素を追加してもいいし、現在値管理用の(別の構造体の)配列を用意してもいいです。 戦闘だけにしか使わず保存する必要がないなら、戦闘ルーチンだけのローカル変数でもいいです。

MK-22
質問者

お礼

わかりやすい説明ありがとうございました もう一度ポインタや構造体を勉強したいと思います。

関連するQ&A