在C++中,表达式"*pointer ++"如何工作?

And*_*rew 3 c++ pointers operators

#include <iostream>
using namespace std;

int main () {
    int value = 1, *pointer;
    pointer = &value;
    cout << *pointer++ << endl;
    cout << *pointer << endl;
}
Run Code Online (Sandbox Code Playgroud)

为什么++操作员不增加value

NPE*_*NPE 10

post-increment(++)的优先级高于dereference(*).这意味着++绑定pointer而不是绑定*pointer.

参见C FAQ 4.3及其中的参考资料.


Mar*_*ork 7

好的,每个人都解释了参数的绑定.
但没有人提到它意味着什么.

int    data[1,2,3,4,5];

int*   pointer = data;

std::cout << *pointer++ << std::endl;
std::cout << *pointer   << std::endl;
Run Code Online (Sandbox Code Playgroud)

如前所述,++运算符具有更高的优先级,因此比*运算符更紧密.所以表达式也是等价的:

std::cout << *(pointer++) << std::endl;
std::cout << *pointer << std::endl;
Run Code Online (Sandbox Code Playgroud)

但是operator ++是后缀版本.这意味着指针递增但操作结果返回原始值以供*运算符使用.因此我们可以修改声明如下;

std::cout << *pointer << std::endl;
pointer++;
std::cout << *pointer << std::endl;
Run Code Online (Sandbox Code Playgroud)

因此输出的结果是当前指向的整数,但指针也会递增.所以印刷的价值是

1
2
Run Code Online (Sandbox Code Playgroud)

2
3
Run Code Online (Sandbox Code Playgroud)