このソースコードを作ってみたはいいのですがあまり理解ができておりません。
初めにnewで定義したcounterは0なのですがcounter++をすると増えていきます。なぜでしょうか?
もう一つはポインタを使わずにa[couter]とすれば実行するとおかしい結果になってしまいます。なぜポインタを使わないといけないのでしょうか?
よろしくお願いします。
出力結果
整数を入力せよ(終了は9999)
11
63
45
78
9999
X[0]=11
X[1]=63
X[2]=45
X[3]=78
C++
1 2#include<iostream> 3using namespace std; 4int main(){ 5 cout << "整数を入力せよ(終了は9999)" << endl; 6 int counter=0; 7 int *p; 8 p = new(nothrow)int[counter]; 9 10 while(true){ 11 int number; 12 cin >> number; 13 if(number == 9999) break; 14 p[counter]=number; 15 counter++; 16 } 17 18 for(int i=0; i<counter; i++){ 19 cout << "X[" << i << "]=" << " " << p[i] << endl; 20 } 21} 22 23
> このソースコードを作ってみたはいいのですがあまり理解ができておりません。
最初から理解してないけどコードを書き進めたので自分の書いたコードを解説してほしい、と言う質問でしょうか? それとも書いたはいいが、一応動いているように見えるのでなぜなのか解説してほしい、と言う質問でしょうか。(実際、たまたまエラーが無く、動いているように見えているだけです)
実際動いています。なので自分の書いたコードを解説してほしいです。
よろしくお願いします。
4個ではなく、もっとたくさん(例えば 20個)入力したらどうなりますか?
同じように20個の出力結果になります。
たまたま動いているだけの範囲外アクセスコードです
分かりました。ではvectorを使わずに可変長配列を作る事は可能でしょうか?
よろしくお願いします。
あなたの言う「可変長配列」とは何か? 何を満たすべきなのか? 求められている機能とは何か?
…といった事柄が自身の中で定まっているのでしょうか?
・YESの場合 → じゃあそれを実装すればよいのではないのか?
・NOの場合 → コードを書き始める前に,まず「何を作るのか」という話を具体的に決定すべき.
それはそれとして,質問内容自体がちょっと意味がわからない感じなので,回答が得られるようにするためには,そこを明らかにする必要がありそう.
質問内容は下記引用の2つであると思われる.
(1)
> newで定義したcounterは0なのですがcounter++をすると増えていきます。なぜでしょうか?
(2)
> ポインタを使わずにa[couter]とすれば実行するとおかしい結果になってしまいます。なぜポインタを使わないといけないのでしょうか?
---
(1)に関して:
「newで定義したcounter」という記述の意味するところが不明です.
「"counter" が,"new"なるものによって"定義"された」という意味の記述であるように読めますが,それでは意味が通じません.
(2)に関して:
突然出てきた "a" の正体が不明なので,意味が全く把握できない文章になっています.
回答2件
あなたの回答
tips
プレビュー