需要帮助理解指针练习的输出

时间:2014-03-20 00:57:02

标签: c++

您好我正在读一本书,并且有一个显示此代码的问题:

以下代码的输出是什么?

int main()
{
int x;
int *p;
int *q;
p = new int[10];
q = p;
*p = 4;
for(int j = 0; j<10; j++)
{
    x = *p;
    p++;
    *p = x+j;
}
for(int k= 0; k<10; k++)
{
    cout << *q << " ";
    q++;
}
cout << endl;
return 0;
}

我知道输出是:

4 4 5 7 10 14 19 25 32 40

但是我无法理解为什么,我知道p = q并且由于10的数组中的第一个p等于4,所以q之后不应该只是每次增加1,因为j是?

1 个答案:

答案 0 :(得分:0)

p++递增指针,使其指向下一个元素。这称为指针算法。这不会影响价值。为此,您需要使用*取消引用指针,如*p = x+j

*p = x+j;p指向的值设置为x+jx =指向上一个p的值(在递增之前),j从0到9.因此它给出了:

4 + 0(4),4 + 1(5),5 + 2(7),7 + 3(10),......

因为它将第一个元素初始化为4并开始在第二个元素处写,所以这就是你在开头有两个4的原因。

但是,我认为循环应该是

for(int j = 0; j<9; j++)
{
    x = *p;
    p++;
    *p = x+j;
}

否则会有对p的无限制访问权限。