gpt4 book ai didi

c - 试图用指针来理解这句话

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:27 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com