C - 为什么允许我这样做?

标签 c pointers

int b[2], *ptr;
b[0] = 5;
b[1] = 7;

ptr = &b[0];
*ptr++ = 66;

printf("%d", *ptr);

为什么我可以执行 *ptr++ = 66 行,即使 = 66 位似乎什么都不做?当我打印 *ptr 时,它是 7。谁能解释为什么?编译器不应该提示 = 66 位没有效果吗?

难道 *ptr++ = 66 基本上等同于 7 = 66 吗?

最佳答案

这是怎么回事:

  1. b[0] 被分配了 66 值,因为您正在引用 ptr,即您正在做 *ptr,然后执行赋值

  2. 指针本身递增,即&b[0]++,变为&b[1]

  3. ptr 现在指向 b[1],即 7

换句话说:递增和赋值是在两个完全不同的事情上进行的。由于它是后缀递增,因此指针在其原始地址接收到新值后递增。

关于C - 为什么允许我这样做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5610132/

相关文章:

c++ - 如何从另一个 vector/对象集构造一个新的 vector/指针集?

c++ - `(T *)0 - (T *)0` 是否明确定义为 0?

c++ - 复制 std::string::insert(int pos, char ch)

c - struct itimerspec 中的浮点值

c - 对于通用内存池,如何在 C 中的指针之间自由转换?

c - 关于指针的问题

c - 如何模糊 stdarg.h 函数?

c - 通过 getauxval 检测 Power8 核心加密?

c - 如何将char数组中存储的int转换为int变量进行计算?

c - 如何在 FreeDOS 中编写内联汇编