我试图理解为什么我有这个输出。
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] 的值分配给 a[ 0](这不会影响任何东西)并且在这个 ptr 之后应该指向 a[1] 上的 10,但真正发生的是最后 a[1] 也是 5,有人可以向我解释一下吗?
最佳答案
您看到的是未定义的行为。该语言不保证首先评估 LHS 还是首先评估 RHS。平台可以选择先评估哪一方。
看起来在您的平台中,首先评估 RHS。
RHS 的值为 5
。副作用是 ptr
指向 a[1]
。
然后赋值给*ptr
,即a[1]
。
注意 在现实世界中强烈反对这种编程风格,因为编译器可以做任何它选择做的事情。参见 http://en.wikipedia.org/wiki/Undefined_behavior .
关于c - 试图用指针来理解这句话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27219312/