试着用指针理解这句话

Pat*_*ard 1 c arrays pointers dereference

我想知道为什么我有这个输出.

a[0]: 5, a[1]: 5, ptr: 5
Run Code Online (Sandbox Code Playgroud)

从这个小程序.

#include <stdio.h>

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

    *ptr = *(ptr++);

    printf("a[0]: %d, a[1]: %d, ptr: %d\n", a[0], a[1], *ptr);

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

我不理解的部分是.

*ptr = *(ptr++);
Run Code Online (Sandbox Code Playgroud)

因为根据我应该发生的事情是,PTR应指向10,仅此而已,因为++后缀应该增加配置后PTR,所以按照我这个应该分配的值[0]到[0](哪个不会影响任何东西)并且在这个ptr之后应该指向[1]上的10,但真正发生的是最后一个[1]也是5,有人可以向我解释这个吗?

R S*_*ahu 5

你所看到的是未定义的行为.该语言不保证首先评估LHS还是首先评估RHS.平台可以选择首先评估哪一方.

在您的平台中,首先评估RHS.

RHS的价值是5.副作用是ptr指向a[1].

然后,它被分配给*ptr,即a[1].

注意事项 由于编译器可以执行任何选择,因此在现实世界中强烈建议不要使用这种编程风格.请参见http://en.wikipedia.org/wiki/Undefined_behavior.