int main(){
int *p=0;
printf("%d",++p);
}在我的机器中,我得到的输出是4;我最初认为*p指向地址0,它的增量从0指向地址4。
后来我声明了*p = -1;我认为它应该抛出错误,因为-1不能是一个地址,但它输出"3“:(
请让我知道这里发生了什么。提前谢谢。
发布于 2012-11-21 22:05:28
int *p=0在地址0处声明了一个指针。
++p将该指针递增特定于主机的sizeof int。这在您的系统中是4个字节。
int *p=-1提供了一个地址为0xffffffff的指针(假设是32位指针)
++p等同于0xffffffff + 4,即0x100000003。这会溢出一个32位的int,只剩下0x00000003。
发布于 2012-11-21 22:04:13
未定义的行为。
当你说:
int* p = 0;您声明了一个指向null (或C++11中的nullptr )的指针。然后,当你这样做的时候:
printf("%d", ++p);发布于 2012-11-21 22:08:30
我们可以检查C标准来决定C实现是否应该允许负指针。然而,-1可能是有效的地址值(32位的0xffffffff ),递增它会导致0xffffffff+4= 0x03。
https://stackoverflow.com/questions/13494950
复制相似问题