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所以将始终指向该值。

将数组定义为整数数组

IEint array[9];

然后将值放入该数组

IEarray[i] = n;

或者

从堆中分配一些内存

IE

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

但是您随后必须释放此内存delete以避免内存泄漏。

于 2012-07-18T20:32:42.180 回答
2

这里有几个问题。

  1. 您无处可存储这些值。您有一个由 8 个指针组成的数组,它们都设置为指向同一个变量 n,该变量位于堆栈上,因此超出了范围。
  2. 该数组有 8 个元素,因此循环在末尾结束
  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 回答