增量指针打印垃圾?

Tre*_*art 6 c c++ pointers

我写了以下代码:

void incrementNumber(int *num)
{
    *num++;
    printf("%i\n", *num);
}

int main()
{
    int i = 3;
    printf("%i\n", i);

    int *ptr = &i;

    incrementNumber(&i);
    printf("%i\n", i);

    getchar();
    getchar();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

每当我以增量编号输出num时,它只会打印垃圾,但是如果我将代码更改为:

void incrementNumber(int *num)
{
    *num += 1;
    printf("%i\n", *num);
}
Run Code Online (Sandbox Code Playgroud)

它按预期输出值.我正试图摆脱使用引用,所以我可以更好地理解指针因为(像大多数人一样)我对指针的知识相当有限,所以我试图更好地掌握它们.

还让我重新解释一下这个问题,我知道为什么它输出那个垃圾值,这是因为它增加了内存地址并在那个位置打印垃圾而不是增加内存地址中包含的值,我想我问的是为什么它是通过增量而不添加来实现的吗?它只是这两个命令编译成汇编的方式吗?有没有办法以这种方式增加指针指向的值?

use*_*500 4

这是因为优先级:*num++被评估为num++然后取消引用。当您接下来打印该值时,在本例中它来自无效指针。

如果您使用(*num)++,您将得到您想要的结果。