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

Need help understanding output of a pointer exercise

本文关键字:练习 输出 指针 帮助 助理      更新时间:2023-10-16

嗨,我正在研究一本书,有一个问题显示了以下代码:

以下代码的输出是什么?

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也是,但在那之后,它不应该每次增加一个吗?

p++递增指针,使其指向下一个元素。这就是所谓的指针算术。这不会影响值。为此,您需要像在*p = x+j 中那样使用*取消引用指针

CCD_ 4将CCD_ 5所指向的值设置为CCD_。x=指向前一个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;
}

否则将存在对CCD_ 10的越界访问。