您好我正在读一本书,并且有一个显示此代码的问题:
以下代码的输出是什么?
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是?
答案 0 :(得分:0)
p++
递增指针,使其指向下一个元素。这称为指针算法。这不会影响价值。为此,您需要使用*
取消引用指针,如*p = x+j
*p = x+j;
将p
指向的值设置为x+j
。 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;
}
否则会有对p
的无限制访问权限。