コード 1:
int n;
int c[n];
scanf("%d",&n);
コード 2:
int n;
scanf("%d",&n);
int c[n];
最初のものはセグメンテーション違反を引き起こしますが、2番目のものは正常に機能します。
どちらのコード セグメントも初期化されていない変数を使用するため、未定義の動作を引き起こします ( を渡すint
必要がある場所に を渡すことは言うまでもありませんint*
。未定義の動作では、コンパイラは何が起こるかについて保証しません。最初のケース、2 番目のケースでエラーを生成しないか、悪魔が鼻から飛び出します。
何が起こっているかというとn
、たまたま書き込み可能なアドレスに設定された値を持つ場合とそうでない場合があります。