题目:
void main(void)
{
int * p = 0x100;
p += sizeof(long);
printf("%x\n",p);
}
问题:
问题1: int * p = 0x100;,这句是合法的吗?
问题2:如果合法,p的地址是多少?*p的值又是多少?
调试工具:VS
从代码逻辑上讲,这句是可以的。
p的地址就是0x100,但这个地址不是随便哪个程序能直接访问的,所以你进行*p操作就会出问题。
首先,它是合法的,因为指针本来就是存地址,p的地址本来就是0x100,但是指针没有指向任何数据,所以*p为空
int * p = 0x100是可以的,但是只能读,不能进行写操作,可能涉及权限什么的
p的地址你可以打印出来看看,printf(“%x”,&p);
*P的值就是地址0x100地址往后4个字节的值,同上可打印出来看看。
这两个的值不是固定的,有可能会被改变,但是有可能你每次看都相同