c – 增量指针打印垃圾?

我写了以下代码
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+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录<future>future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...