#include <iostream>
using namespace std;
int main () {
int value = 1, *pointer;
pointer = &value;
cout << *pointer++ << endl;
cout << *pointer << endl;
}
为什么
++
运算符不增加 value
?
好了,参数的绑定大家都解释完了
但没有人提到这意味着什么。
int data[1,2,3,4,5];
int* pointer = data;
std::cout << *pointer++ << std::endl;
std::cout << *pointer << std::endl;
如上所述,++ 运算符具有更高的优先级,因此比 * 运算符绑定更紧密。所以表达式也是等价的:
std::cout << *(pointer++) << std::endl;
std::cout << *pointer << std::endl;
但是运算符++是后缀版本。这意味着指针会递增,但操作结果返回原始值以供 * 运算符使用。因此我们可以将语句修改如下;
std::cout << *pointer << std::endl;
pointer++;
std::cout << *pointer << std::endl;
因此输出的结果是当前指向的整数,但指针也会递增。所以打印的值是
1
2
不是
2
3
++
的优先级高于 *
,因此您的表达式相当于 *(pointer++)
——它取消引用值,然后递增指针,而不是值。如果您想增加该值,您需要执行(*pointer)++
。
这和做是一样的事情
*(pointer++)
因为它增加了指针所保存的地址,然后它取消引用它。
*pointer++
的意思是*(pointer++)
。
即,它增加指针,而不是被指针。
记住这一点的一种方法是阅读原始的 K&R“C 编程语言”,其中
strcpy
的示例使用了此内容。
无论如何,这就是我记住优先顺序的方式。
并且由于它增加了指针,因此您的第二次取消引用具有未定义的行为。
干杯,
您正在增加指针的值,而不是它所指向的值。