增量运算符++似乎与+2没有相同的特性

时间:2015-02-07 09:21:05

标签: c++

我现在忙于指针,特别是当我递增时指向数组中不同元素的指针。

当我使用++递增时,一切都很好,但是当我使用+2递增时,事情的结果与我的预期不同。

让我解释一下。

在第一个实例中,我设置了p2 = p1++;。我得到的结果是我的预期,即。 p2给出值2p1给出值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,这很好,但这也没有解决我的具体问题。

Link1
Link2 SO

请你用最简单的术语解释,因为我还是C ++新手。

Instance One

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;
}

2 个答案:

答案 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可能会有所帮助。