2010-05-29 56 views
6

我是一名全新的編程學生,所以請原諒我的無知。我的任務如下:如何將指針重置爲特定的陣列位置?

編寫一個聲明10個整數數組的程序。編寫一個循環,接受來自鍵盤的10個值並寫入另一個顯示10個值的循環。不要在兩個循環中使用任何下標;只使用指針。

這裏是我的代碼:

#include "stdafx.h" 
#include <iostream> 
using namespace std; 

int main() 
{ 
    const int NUM = 10; 
    int values[NUM]; 
    int *p = &values[0]; 
    int x; 
    for(x = 0; x < NUM; ++x, ++p) 
    { 
     cout << "Enter a value: "; 
     cin >> *p; 
    } 
    for(x = 0; x < NUM; ++x, ++p) 
    { 
     cout << *p << " "; 
    } 
    return 0; 
} 

我想我知道我的問題是。我的第一個循環後,我的指針是在值[10],但我需要回到值[0]來顯示它們。我怎樣才能做到這一點?

+1

這聽起來更象C比C++ :-) – nc3b 2010-05-29 18:07:18

+1

@ nc3b:如果沒有,你可以通過反向打印它們有一些有趣的我已經發現很多大學都說他們教C++,但實際上用'cin'和'cout'顯示C。 – zneak 2010-05-29 18:11:17

+0

是的,我的高中也發生過這樣的事情:-( – nc3b 2010-05-29 18:12:24

回答

7

你可以做的正是像你一樣第一,當你分配p

p = &values[0]; 

此外,陣列非常喜歡指針(你不能改變)靜態分配的內存。因此,表達式&values[0]的計算結果與values所做的相同。因此,

p = &values[0]; 

相同

p = values; 
+0

非常感謝! – talena6 2010-05-29 18:09:10

+2

@ohtanya:沒問題。如果效果不錯,可以點擊答案評分下的複選標記來接受答案:) – zneak 2010-05-29 18:12:20

+1

與普遍的看法相反,數組是* not *指針。在標準語言中,指針是*可修改的l值*,而數組不是。爲了證明這一點,比較兩個賦值:'p = values;'和'values = p;'。這就是奇怪的'&array [subscript]'語法來自哪裏。它在這種情況下工作,因爲數組名稱被用作'r值'。 – 2010-05-29 18:18:39

0

難道你的任務說,你不得不爲了打印的數字?

while (p != values) 
{ 
    cout << *(--p) << " "; 
} 

(只需使用此代碼爲學習)