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及其中的参考资料.
好的,每个人都解释了参数的绑定.
但没有人提到它意味着什么.
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)