c++ - 为什么通过指针变量 (*variablePointer++) 对变量的值进行增量后返回垃圾值?

标签 c++ c pointers post-increment

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

相关文章:

c++ - 如何查找 Winsock.h 包含在 Visual Studio 中的位置

c++ - 帮助 Arduino 和 Analog Min Max 设置

c++ - 是否有一个 lib(跨平台)来处理操作系统日期?

c - ARM neon 指令生成

c - Raspberry 微内核,似乎什么都不做

c++ - 我怎样才能通过引用传递这个指针?

c++ - 返回对 const 类型的 const 指针的引用

c++ - 如果有一个几何着色器处于事件状态,如何将信息从顶点着色器传递到片段着色器?

c - 关于 C 中的指针基础知识

c++ - 以下使用 const_cast 是未定义的行为吗?