c++ - 递增指针打印垃圾?

标签 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;
}

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

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

它按预期输出值。我试图避免使用引用,以便更好地理解指针,因为(像大多数人一样)我对指针的了解相当有限,所以我试图更好地掌握它们。

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

最佳答案

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

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

关于c++ - 递增指针打印垃圾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35236893/

相关文章:

c++ - 从带有原始指针的 vector 中删除 std::unique_ptr 的最佳方法?

C++ std::destroy(T * 指针)

c - PLI Verilog : how to restart a simulation

c - set_add 和 set_contains 错误

c++ - C++中括号的不同含义?

c++ - 新的 C++ Mongo 驱动程序 : how to see type and how to get string value

带有 void 指针参数的回调会产生警告

c - GCC 如何自动知道包含 glib 库?

C将字符串解析为没有任何lib函数的字符数组

在 C 中不使用 strcpy 将字符指针复制到另一个字符指针