- pollyanna1991
- 1679
- 0
- 1
- 0
@pollyanna1991 たとえば hogehogehoge2(int input_a, int input_b, refer ans1, refer ans2){ ans1=a+1; ans2=b+1; } とかして、
2011-08-23 01:34:52@pollyanna1991 たとえば void event_sample(){ int ans1=0, ans2=0; for(int i=0;i<10;i++){ hogehogehoge2(ans1, ans2, ans1, ans2); } } などとすれば。
2011-08-23 01:35:45@pollyanna1991 こんなふうに変えれば、input_aはそのときのans1が代入されますし、input_bにはそのときのans2が代入されますから、期待されたとおり徐々に増えて行きます。
2011-08-23 01:37:57@pollyanna1991 そうですね、さっきのダメな例はa=0が変わらず、input_aがいつも0になっちゃうので結果が同じなんです。
2011-08-23 01:36:46@pollyanna1991 for文が始まって最初のhogehogehoge2実行のとき、input_a に ans1(=0)が、input_bにans2(=0)が代入されます。
2011-08-23 01:40:37@pollyanna1991 =文字一個は、数学の等号ではなく、「右のデータを左の変数に代入」する操作を行うコマンドです。なので、等号とは違うと理解してください。
2011-08-23 01:41:58@pollyanna1991 先ほどの続きですが、同時に、hogehogehoge2内のans1としてevent_sampleのans1のメモリを使う、hogehogehoge2内のans2としてevent_sampleのans2のメモリを使うと設定されます。
2011-08-23 01:44:37@pollyanna1991 で、hogehogehoge2内ですが、input_a(この時点では=0)に1を足した結果をans1に代入し、input_b(この時点では=0)に1を足した結果をans2に代入しています。
2011-08-23 01:46:11@pollyanna1991 結果、referでメモリを共有してますので、event_sample側のans1も1、ans2も2に変わります。
2011-08-23 01:46:31@pollyanna1991 訂正 x input_b(この時点では=0)に1を足した結果をans2に代入しています。 o input_b(この時点では=0)に2を足した結果をans2に代入しています。
2011-08-23 01:47:30@pollyanna1991 i=0な1周目では、結局、ans1=1, ans2=2になって計算が終わりました。続いてi=1になって2周目
2011-08-23 01:48:48@pollyanna1991 hogehogehoge2実行時に、input_aはその時点でのans1の内容が代入されます。すなわち1が代入されます。input_bはその時点でのans2の内容が代入されます。すなわち2です。メモリの共有は同じ。
2011-08-23 01:50:16@yumeno_star あー、勘違いしてました。hogehogehoge2内の後半の ans1, ans2は戻り値であって、式に直接代入される値ではないんですね。
2011-08-23 01:49:38@pollyanna1991 そうですそうです。ゆえに2周目の計算結果はhogehogehoge2の内部動作の説明を省くとans1=2, ans2=4に変わります。
2011-08-23 01:51:22@pollyanna1991 もひとつ書き方がありますね。 int hogehogehoge3(refer ans1, refer ans2){ ans1 = ans1+1; ans2 = ans2+2; }
2011-08-23 01:52:32@pollyanna1991 んでもって void event_sample(){ int ans1 = 0; ans2 = 0; for(int i=0; i<10; i++){ hogehogehoge3(ans1, ans2); } } こんなの。
2011-08-23 01:53:32@pollyanna1991 しまった恥ずかしい。訂正 x int ans1=0; ans2=0; o int ans1=0, ans2=0;
2011-08-23 01:55:20