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.