询问一个C语言问题的答案

来源:百度知道 编辑:UC知道 时间:2024/05/06 16:12:21
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;

请问p1+5= ;
p2+5= ;

请不仅要给出答案,还要有必要的解题说明

这个结果与环境有关,我这里用sizeof来表示与环境相关的方面:
unsigned char类型的字节数是sizeof(unsigned char),unsigned long类型的字节数是sizeof(unsigned long)。由于指针加法是以所指类型大小为单位移动的,因此p1+5的结果是0x801000加上5*sizeof(unsigned char),p2+5的结果是0x810000加上5*sizeof(unsigned long)

例如现在32位pc机上一般unsigned char为1个字节,unsigned long为4个字节。因此结果为p1为0x801004,p2为0x810014

运行结果: 拒绝访问

p1+5=0x05 ;
p2+5=0x81005 ;