我现在忙于指针,特别是当我递增时指向数组中不同元素的指针。
当我使用++
递增时,一切都很好,但是当我使用+2
递增时,事情的结果与我的预期不同。
让我解释一下。
在第一个实例中,我设置了p2 = p1++;
。我得到的结果是我的预期,即。 p2
给出值2
,p1
给出值3
。这显然是因为p1
的初始值已分配给p2
,之后p1
会增加1,从而为p1
提供新值。没问题。
然而;在第二个实例中,我设置了p2 = p1+2
。我得到的结果不是我的预期。结果是p1
给出2
的值,p2
给出4
的值。怎么会这样?不应该像在第一个实例中一样,p1
的初始值已分配给p2
,然后p1
增加2并给出新值{{1} }?
然后我想了一下。也许4
和+2
具有不同的特征。我的意思是,在使用++
时,在这种情况下,代码会说(用外行的术语):“让++
指向与p2
相同的地址开始,然后让p1
指向下一个元素的地址“。但是当使用p1
时,代码会说:“从+2
向下转到元素2”块“,让p1
指向该特定元素的地址;但不要更改地址p2
正指向这样做!“。这就是我所说的“它们表现出不同的特征”。他们不会以同样的方式行事。
我的假设是否正确?
另外,在这个例子中你如何增加两个(或三个或四个等),同时保持与p1
运算符相同的特性?
以下是我研究过的处理增量的网站的链接。但是他们都没有真正正确解决我的问题。也没有任何其他网站。此外,他们中的大多数建议使用像++
之类的东西来增加2,这很好,但这也没有解决我的具体问题。
请你用最简单的术语解释,因为我还是C ++新手。
a +=2
#include <iostream>
int main()
{
int a[5] = {1,2,3,4,5};
int *p1, *p2;
p1 = &a[1];
p2 = p1++;
std::cout << "Value1: " << *p1 << "\n" << "Value2: " << *p2;
return 0;
}
Value1: 3
Value2: 2
#include <iostream>
int main()
{
int a[5] = {1,2,3,4,5};
int *p1, *p2;
p1 = &a[1];
p2 = p1+2;
std::cout << "Value1: " << *p1 << "\n" << "Value2: " << *p2;
return 0;
}
答案 0 :(得分:3)
p2 = p1+2;
不修改p1
的值。它只是将p1+2
的结果分配给p2
。
p2 = p1++;
修改p1
的值。它首先将p1
分配给p2
,然后将p1
增加一。
答案 1 :(得分:2)
输出正是预期的结果。执行此分配时:
p2 = p1 + 2;
您只需要将值p1 + 2
分配给p2
,就是这样。 p1
没有理由更新。您似乎将+
运算符与后递增/预递增++
运算符混淆。
A little reminder可能会有所帮助。