NULL地址位置的值是多少?

man*_*nyu 1 c null

为什么这段代码打印4作为输出?

还请提供一些细节,以帮助我更好地理解这种行为.

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

Ern*_*ill 9

您将指针设置为0(NULL),然后向其添加1; 然后你将结果转换为a int并打印结果.这里需要的关键知识是当你递增(加1)一个指针时,你实际上添加了指向对象的大小 - 一个int指针被提前指向下一个 int.由于int您的平台上(显然)是4个字节,因此p会增加指向它开始的4个字节的地址.