gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:53:38 24 4
gpt4 key购买 nike

嗨,我正在研究一本书,有一道题目显示这段代码:

以下代码的输出是什么?

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 也等于 4,但在那之后它不应该每次都递增 j 吗?

最佳答案

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

*p = x+j;p指向的值设置为x+jx = value pointed to previous p (before increment) and j goes from 0 to 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

关于c++ - 需要帮助理解指针练习的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22521386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com