关于C语言指针问题。

题目:
void main(void)
{
int * p = 0x100;

p += sizeof(long);

printf("%x\n",p);

}

问题:
问题1: int * p = 0x100;,这句是合法的吗?
问题2:如果合法,p的地址是多少?*p的值又是多少?

调试工具:VS

img

img

从代码逻辑上讲,这句是可以的。
p的地址就是0x100,但这个地址不是随便哪个程序能直接访问的,所以你进行*p操作就会出问题。

首先,它是合法的,因为指针本来就是存地址,p的地址本来就是0x100,但是指针没有指向任何数据,所以*p为空

int * p = 0x100是可以的,但是只能读,不能进行写操作,可能涉及权限什么的
p的地址你可以打印出来看看,printf(“%x”,&p);
*P的值就是地址0x100地址往后4个字节的值,同上可打印出来看看。
这两个的值不是固定的,有可能会被改变,但是有可能你每次看都相同