- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数のアドレスを関数から取得したいのですが)
関数から複数のアドレスを取得する方法
このQ&Aのポイント
- 関数から複数のアドレスを取得する方法について教えてください。
- 要件としては、関数から複数のアドレスを取得したいということです。
- 具体的なイメージとしては、main関数のtest1とtest2にTest関数のdata1とdata2のアドレスが入るようにしたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
data1とdata2はTestの中のローカル変数なのでTestが終了するとアドレスは不定になると思います。(ヒープ上にとっていると思うので) それでもかまわないのであれば&in_test1のところを&data1のように書き換えれば渡せるとは思います。 コンパイラによってはWarningが出るかなとも思います。
その他の回答 (1)
- zwi
- ベストアンサー率56% (730/1282)
回答No.2
ローカル変数(data1,data)はスタック上に存在するので、呼び元の関数にアドレスを持ち帰ることは出来ません。正確には持ち帰ることは出来ますが、そのアドレスから参照できる値は保障されませんし、書き換えた場合はプログラムの動作が保障されません。 呼び元で変数を用意するか、mallocで確保したヒープ領域のアドレスを持ち帰る方法を検討してください。 なお、mallocした場合は不要になった時点でかならずfreeしてください。
質問者
お礼
ご回答ありがとうございます。 例が悪いので質問をやり直させてください。 申し訳ありません。
お礼
すみません。ご指摘どおり例文自体が打ち間違えました。 void main(){ int *test1,*test2; Test(test1,test2); } void Test(int *in_test1, int *in_test2){ int data1,data2; data1 = 1; data2 = 2; in_test1 = &data1; in_test2 = &data2; } 本当はクラスでこのようなことをやってはいるのですが、あくまでこれはin_test1とin_test2にアドレスが入り、元のtest1とtest2にはアドレスが入ってこないみたいなのです。