试着用指针理解这句话

时间:2014-11-30 23:01:21

标签: c arrays pointers dereference

我试图理解为什么我有这个输出。

a[0]: 5, a[1]: 5, ptr: 5

从这个小程序开始。

#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;
}

我不理解的部分是。

*ptr = *(ptr++);

因为根据我的说法,应该发生的是ptr应该指向10,仅此而已,因为++ postfix应该在分配后增加ptr,所以根据我这应该将a [0]的值分配给[ 0](这不会影响任何东西)并且在这个ptr之后应该指向[1]上的10,但真正发生的是最后a [1]也是5,有人可以向我解释这个吗?

1 个答案:

答案 0 :(得分:5)

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

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

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

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

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