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

Sam*_*Sam 3 c pointers

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

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

printf("%d", *ptr);
Run Code Online (Sandbox Code Playgroud)

为什么我被允许做*ptr++ = 66行,即使这= 66一点似乎什么都不做?当我打印*ptr它的时候7.有人可以解释原因吗?编译器是否应该抱怨= 66没有效果?

*ptr++ = 66基本上不等同于7 = 66

Bol*_*ock 6

这是怎么回事:

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

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

  3. ptr现在正指向b[1],这是7

换句话说:增量和赋值是在两个完全不同的东西上进行的.并且因为它是后缀增量,所以指针其原始地址接收到新值递增.