带数组的postincrement指针

1 c pointers

无法理解为什么a [1]的值不等于10

void main()
{
    int a[]={2,1};
    int *ptr=a;
    *ptr++=10; //trying to update a[1]=10
    printf("%d",*ptr);
} 
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?

Bil*_*nch 5

我们来看看你的代码,然后将它分开:

int main() {
    int a[]={2,1};
    int *ptr=a;

    // Validation 
    assert(ptr == &a[0]);

    // Let's now do what *ptr++ = 10 actually does:
    *ptr = 10;
    ptr = ptr + 1;

    // Validation
    assert(ptr == &a[1]);

    // Printing. Note that we are printing a[1], not a[0].
    printf("%d",*ptr);
} 
Run Code Online (Sandbox Code Playgroud)

cppreference中读取引用可能也会有所帮助.他们正在讨论后缀增量(ptr++)和前缀增量(++ptr)之间的区别.

返回的运算符后缀版本的结果是原始操作数,副作用是在返回此结果后操作数递增/递减.

运算符的前缀版本的返回结果是递增/递减的操作数.

听起来你想使用前缀增量,而不是后缀增量.