2012-07-18 99 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