• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列v2を逆順にしてv1に格納するプログラム)

配列v2を逆順にしてv1に格納するプログラム

このQ&Aのポイント
  • 配列v2を逆順にしてv1に格納するプログラムの実行結果が思った通りにならない問題が発生しています。
  • 関数intary_rcpyを使用して、要素の順序をひっくり返す処理を行っていますが、実際の実行結果は思った通りになっていません。
  • 関数部以外の問題も考えられますが、具体的にどこが間違っているか指摘していただきたいです。

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

intary_rcpy()内のfor文で「繰り返し実行される」のはどの部分だと思いますか? >for(i = 0; i < no; i++) >v1[i] = v2[no - 1]; >no--; >return(v1); ループ1回目… iは0、noは引数で受け取ったままの状態なので…… v1[0] = v2[5 - 1]; ループ2回目… iは1、noは引数で受け取ったままの状態なので…… v1[1] = v2[5 - 1]; ループ3回目… iは1、noは引数で受け取ったままの状態なので…… v1[2] = v2[5 - 1]; (以下略) forループが終わった後で no--; が実行されてnoが4になります。(が、その後returnするので意味はない) 今回の場合なら… for(i = 0; i < no; i++) v1[i] = v2[(no - 1) - i]; でしょうかね? というか…… >nt v1[] = {}; で、添え字のサイズが不正…とかにならないんでしょうか? # サイズ0の配列であれば……バッファオーバーフローでステキに破壊していきますが。(たぶんv2[]が壊させる)

jussmen_1979
質問者

お礼

具体例まで挙げていただきありがとうございます。 for 文で複数行を繰り返す際には {} が必要ということですね。 {} を付けてやり直した結果、別の問題が発生しましたが、解決することができました。 提示いただいた部分を使わせていただき、プラスいくつか手直しして 期待通りの結果を得ることができました。 おかげさまで配列の宣言と for 文について理解が深まり、 そのほかにも気が付いていなかった間違いに気が付くことができました。 有難うございました。 「変更内容」 > for(i = 0; i < no; i++) > v1[i] = v2[no - 1]; > no--; for(i = 0; i < no; i++) v1[i] = v2[(no - 1) - i]; > int v1[] = {}; int v1[5] = {0}; > for(i = 0; i < (NUMBER - 1); i++) for(i = 0; i <= (NUMBER - 1); i++)

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

C11 は古いドラフトしか持ってなくって正式な規格は確認できないんだけど, int v1[] = {}; は「右辺の {}」が構文エラーになってコンパイルできない (この判断に要素数は関係ないのでたとえば int v1[5] = {}; でも同様) のが正常な動作だと思います>#1. ところで, 実行結果でもう 1つ妙なことに気づきませんか?

jussmen_1979
質問者

お礼

ご指摘有難うございます。 配列の宣言方法を復習し、理解することができました。 理解が曖昧だったようで、先に進むうちに勘違いしてしまったようです。 苦C で提供されている開発環境で勉強しております。コンパイルと実行は可能でしたが、 コンパイル時に普段は出ないポップアップが出ておりました。 宣言を int v1[5] = {0}; することで解消されました。 有難うございました。

関連するQ&A

専門家に質問してみよう