トップページ > プログラム > 2014年09月22日 > w+/ONFEY

書き込み順位&時間帯一覧

23 位/190 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000012000003



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
【初心者歓迎】C/C++室 Ver.92【環境依存OK】

書き込みレス一覧

【初心者歓迎】C/C++室 Ver.92【環境依存OK】
736 :デフォルトの名無しさん[sage]:2014/09/22(月) 17:31:20.59 ID:w+/ONFEY
C言語の関数の呼び出しについておたずねしたいのですが、

int func(int* p) { int n = 0; /* do something */ *p = n; return n; }
int main() { int n = 0,arrays[16]; arrays[n] = func(&n); }

上記のようなコードを実行した場合、関数funcに渡した実引数nはいつ変更されるのでしょうか?
関数funcからmainに処理が戻った時点で(関数の戻り値が配列に代入される前に)nが変更されている保証はあるのでしょうか?
【初心者歓迎】C/C++室 Ver.92【環境依存OK】
739 :デフォルトの名無しさん[sage]:2014/09/22(月) 18:05:05.94 ID:w+/ONFEY
>>737と>>738どっちが本当なんでしょうか?
【初心者歓迎】C/C++室 Ver.92【環境依存OK】
742 :デフォルトの名無しさん[sage]:2014/09/22(月) 18:27:37.55 ID:w+/ONFEY
問題を箇条書きにしますと、
1. arrays[n]の位置の決定
2. 関数funcの評価
3. 決定した配列の位置への値の代入

がどういう順番になるかで実行結果がどうなるかが違ってくると思います

arrays[n]の位置が関数の呼び出し前に決定されると誤った位置に値が代入されるか又はアクセス違反になるかも?
arrays[n]の位置の決定が関数の呼び出しの後だとしても、最適化の問題等により[]演算子の評価の後にnが更新されるかも?
fun()を呼び出した際に確実にnが変更されて、その後に配列にアクセスしないとアクセス違反であぼーんしそう
式の評価順がどうとか、副作用完了点がどうとか、調べても分かりません・・・


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。