我只是在用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/

10-13 05:09