我想知道为什么我有这个输出.
a[0]: 5, a[1]: 5, ptr: 5
从这个小程序.
#includeint 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,仅此而已,因为++后缀应该增加配置后PTR,所以按照我这个应该分配的值[0]到[0](哪个不会影响任何东西)并且在这个ptr之后应该指向[1]上的10,但真正发生的是最后一个[1]也是5,有人可以向我解释这个吗?
你所看到的是未定义的行为.该语言不保证首先评估LHS还是首先评估RHS.平台可以选择首先评估哪一方.
在您的平台中,首先评估RHS.
RHS的价值是5
.副作用是ptr
指向a[1]
.
然后,它被分配给*ptr
,即a[1]
.
注意事项 由于编译器可以执行任何选择,因此在现实世界中强烈建议不要使用这种编程风格.请参见http://en.wikipedia.org/wiki/Undefined_behavior.