c: 在函数中使用指针作为输入时,使用 *pointer++ 递增指针值不起作用

c: when using a pointer as input in a function incrementing the pointers value by using *pointer++ doesn't work

当我学习 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;
}

我的目标是替换增加 num 值而不像这样重新分配它:

num = change(num);

这就是我使用 & 传递 num 的内存位置的原因:因此它可以用作指针。在此版本之前,代码中的所有内容都是相同的。唯一不同的是我说 *i++; 而不是 *i += 1;

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

Now my question is why i can't say *i++

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

*(i++);

相当于:

int* temp = i;  // Store the old pointer in a temporary variable.
i++;            // Increment the pointer
*temp;          // Dereference the old pointer value, effectively a noop.

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

这是由于 operator precedence

您可以看到 "postfix increment" 处于优先级 1,"Indirection (dereference)" 处于优先级 2,并且优先级 1 先发生。所以你需要使用方括号来让取消引用首先发生:(*i)++.

不同之处在于 (*i)++ 表示找到 i 指向的内存并递增它(你想要的)。 *(i++) 表示增加 i 本身(因此它指向 next 内存地址),并取消引用它;这可能是一个空操作,而不是你想要的。