2012-07-18 98 views
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个输入的数字,但它不工作为什么?你能解释我为什么以及如何解决或改进它。我只是一个初学者,它不是测试我读过的作业。C++中的数组指针

+0

什么不工作是什么呢?你有错误吗? – talnicolas 2012-07-18 20:28:29

+1

你为什么使用int * array [8]?为什么指针? – Drise 2012-07-18 20:30:09

+1

@Drise“我只是一个初学者” – Joe 2012-07-18 20:32:12

回答

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; 
} 
+0

好吧生病尝试并重新发布我的代码 – user1535963 2012-07-18 20:38:21

1

您正在保存一个指向n的指针,但是您经常更改n的值。

0

你不需要在这里弄乱指针。改变你的数组定义,你如何填充它,以及你如何显示,你应该有更好的运气。

int array[9]; 
... 
array[i] = n; 
... 
cout << array[0] << endl; 
4

线

array[i] = &n; 

将存储相同的地址在阵列中的每个条目。这只是指向n,因此将始终指向该值。

要么定义数组为整数

int array[9];

的阵列,然后将值放入该数组

array[i] = n;

OR

分配一些内存关闭堆

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

但随后你将不得不释放此内存与delete,以避免内存泄漏。

+0

好吧生病尝试,谢谢 – user1535963 2012-07-18 20:38:36

+0

最后一点会引起内存泄漏,除非你小心 - 答案是否正确取决于究竟是什么OP正在尝试做 - 但我怀疑他们不需要那么复杂。 – Mark 2012-07-18 20:38:47

+0

@mark - 我知道。我刚刚补充说,但电话响了。 – 2012-07-18 20:44:01