我只是在使用 C
语言玩弄前/后递增/递减。在下面的程序中,变量 var
一切正常。但是递增到指针变量 *varAddress++
返回垃圾值。
#include <stdio.h>
int main(int argc, const char * argv[])
{
int var = 1;
int *varAddress = &var;
printf("Value befor pre increment %d\n",*varAddress);
++*varAddress;
printf("Value after pre increment %d\n",*varAddress);
printf("Value befor post increment %d\n",*varAddress);
*varAddress++;
printf("Value after post increment %d\n",*varAddress);
return 0;
}
输出
Value befor pre increment 1
Value after pre increment 2
Value befor post increment 2
Value after post increment 1606416400
Program ended with exit code: 0
最佳答案
根据Operator Precedence , 后缀自增的优先级高于间接运算符,所以 *varAddress++
等价于:
*(varAddress++);
这将增加指针本身,然后指向其他地方未分配的内存,这就是为什么 *varAddress
将返回垃圾值(这是 UB)。
你可能想要:
(*varAddress)++;
关于c++ - 为什么通过指针变量 (*variablePointer++) 对变量的值进行增量后返回垃圾值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36301283/