2010-05-29 39 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) << " "; 
} 

(只需使用此代码为学习)

相关问题