C++ 递增指针打印垃圾?

C++ 递增指针打印垃圾?,c++,c,pointers,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(); re

我编写了以下代码:

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;
}
每当我以增量数字输出num时,它只打印垃圾,但是如果我将代码更改为:

void incrementNumber(int *num)
{
    *num += 1;
    printf("%i\n", *num);
}
它按预期输出值。我试图避免使用引用,以便更好地理解指针,因为(像大多数人一样)我对指针的知识相当有限,所以我试图更好地掌握它们


让我重新表述一下这个问题,我知道它为什么会输出那个垃圾值,因为它会增加内存地址并在那个位置打印垃圾,而不是增加内存地址中包含的值,我想我要问的是,为什么它会在增量上这样做,而不是添加到?这就是这两个命令编译到汇编的方式吗?有没有办法以这种方式增加指针指向的值?

我很高兴您了解这一行中发生的情况:

*num++;
问题在于运营商的优先级。我认为“++”比“*”优先(当然,在这种情况下)。试着写下这个,它会按照你想要的方式工作:

(*num)++;

有一件事我不知道,而且刚刚学到的是,在这个上下文中指针操作的优先级高于+=。

这是因为优先级:
*num++
计算为
num++
,然后取消引用。下一步打印值时,它来自本例中的无效指针


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

优先级:
*(num++)
(*num)+
之间有区别。您得到垃圾是因为您编写了与第一个代码等价的代码,但可能打算使用第二个。想想原型
strcpy()
循环:
while((*dst++=*src++)!='\0')-这是怎么回事?为什么一个单指针教程没有提到我不知道,但你太棒了,我现在觉得很愚蠢,谢谢!此行:
*num++有优先级问题。建议使用:
(*num)+发布的代码没有干净地编译。编译器引发消息:`warning:unused variable'ptr'[-Wunused variable]它可以工作!这是有道理的,我想只是说“*num++”是一件模棱两可的事情,所以这很有道理。干杯