是什么让这个程序代码打印4

Vis*_*esn 1 c memory pointers undefined

int main(){
  int *p=0;
  printf("%d",++p);
}
Run Code Online (Sandbox Code Playgroud)

在我的机器中,我输出为4; 我最初认为*p指向地址0并且它的递增指向从0开始的地址4.

后者我声明*p = -1; 我认为应该抛出错误,因为-1不能是一个地址,但它打印"3":(

请让我知道这里发生了什么.提前致谢.

sim*_*onc 11

int *p=0在地址0处声明一个指针.
++p该指针由特定于主机的指针递增sizeof int.这是您系统上的4个字节.

int *p=-1为您提供了地址的指针0xffffffff(假定32位指针)
++p是相当于0xffffffff + 4其是0x100000003.这会溢出一个32位的int,留给你0x00000003.