0
int n;
int *array[8]
cout<<"Enter Number Between 0-9 Only"<<endl;
for(int i = 0; i< 9; i++){
    cout << "Enter Number " << (i + 1) << endl;
    cin >> n;
    if((n >= 0) && (n <= 9))
        array[i] = &n;
    else {
        cout << "Numbers from 0-9 only\n" << endl;
        i--;
    }

}
cout << *array[0] << endl;
}

入力された 9 つの数値をポインター配列に格納しようとしていますが、なぜ機能しないのでしょうか?? その理由と、それを解決または改善する方法を説明していただけますか。私は初心者で、読んだ内容をテストする宿題ではありません。

4

4 に答える 4

4

この線

array[i] = &n;

配列内のすべてのエントリに同じアドレスを格納します。これは単に指しているだけnなので、常にその値を指します。

配列を整数の配列として定義するか

すなわちint array[9];

次に、値をその配列に配置します

すなわちarray[i] = n;

また

ヒープからメモリを割り当てます

すなわち

int *array[9];
...
array[i] = new int;
*array[i] = n;

deleteただし、メモリリークを避けるために、このメモリを解放する必要があります。

于 2012-07-18T20:32:42.180 に答える
2

ここにはいくつかの問題があります。

  1. 値を保存する場所がありません。スタック上にある同じ変数 n を指すように設定されている 8 つのポインターの配列があり、スコープ外になります。
  2. 配列には 8 つの要素があるため、ループは最後を 1 つ過ぎます。
  3. これは C++ であるため、正当な理由がない限り、C 配列を使用しないことをお勧めします。

*NBがコンパイルおよび実行されていないようなものがあります)

{
...
std::vector<int> array;

cout<<"Enter Number Between 0-9 Only"<<endl;
for(int i = 0; i< 8; i++){
    int n;
    cout << "Enter Number " << (i + 1) << endl;
    cin >> n;
    if((n >= 0) && (n <= 9))
        array.push_back(n);
    else {
        cout << "Numbers from 0-9 only\n" << endl;
        i--;
    }

}

cout << array[0] << endl;
}
于 2012-07-18T20:34:52.980 に答える
1

n へのポインタを配列に保存していますが、n の値を常に変更しています。

于 2012-07-18T20:29:30.060 に答える
0

ここでポインターをいじる必要はありません。配列の定義、配列の設定方法、表示方法を変更すると、うまくいくはずです。

int array[9];
...
array[i] = n;
...
cout << array[0] << endl;
于 2012-07-18T20:32:19.703 に答える