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

标签 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] 的值分配给 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/

相关文章:

java - 在 Java 和 C 文件中创建属性

c - ANSI C union ——它们真的有用吗?

c - O(n) 时间内的双维数组排序

c# - 通过数组传递给构造函数

c++ - 正确删除指针双端队列

c - Qsort 无法按照我期望的方式使用 void 指针

c++ - 在 C++ 中通过引用选项传递

c - 使用用户输入填充结构并通过指针访问

c - 从文件中读取动态内存

java - 从数组返回流作为 int[] 而不是 Integer[]