c:当使用指针作为函数的输入时,通过使用*pointer ++递增指针值不起作用

reu*_*uta 3 c pointers operators operator-precedence

当我学习C(我是新手)时,我正在玩指针.在这里你可以看到我的代码:

#include <stdio.h>

void change(int *i)
{
    *i += 1;  
}

int main()
{   
    int num = 3;

    printf("%d\n", num);
    change(&num);
    printf("%d\n", num);

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

我的目标是替换递增num值而不重新分配它:

num = change(num);
Run Code Online (Sandbox Code Playgroud)

这就是为什么我是路过的内存位置num使用&:所以它可以作为一个指针.在此版本之前,代码中的所有内容都是相同的.唯一不同的是我说*i++;而不是说*i += 1;

现在我的问题是为什么我不能说*i++?

R S*_*ahu 7

现在我的问题是为什么我不能说*i ++

由于运算符优先级,*i++相同*(i++).

*(i++);
Run Code Online (Sandbox Code Playgroud)

相当于:

int* temp = i;  // Store the old pointer in a temporary variable.
i++;            // Increment the pointer
*temp;          // Dereference the old pointer value, effectively a noop.
Run Code Online (Sandbox Code Playgroud)

那不是你想要的.你需要使用(*i)++或++(*i).这些将首先取消引用指针,然后递增指针指向的对象的值.