【正确答案】
【答案解析】为了更有说服力地解释本题结果,首先将题目程序完善,在VC++6.0的环境下编译运行,程序源代码如下:
#include<stdio.h>
int main()
{
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char*)0x801000;
p2=(unsigned long*)0x810000;
printf("%x/n",p1+5);
printf("%x/n",p2+5);
return 0;
}
程序输出结果如下:
801005
810014
p1=(unsigned char*)0x801000,是给指针变量赋值,把十六进制0x801000放到字符指针变量中,即指针变量p1的值就是0x801000。
p2=(unsigned long*)0x810000,也是给指针变量赋值,同上。
输出结果p1+5的值是801005,因为指针变量指向的值字符加1表示指针向后移动1个字节,那么加5代表向后移动5个字节,所以输出801005。
p2+5的值是801016,因为指针变量指向的是长整型,加1表示指针向后移动4个字节,那么加5代表向后移动5×4=20个字节,所以输入810014(十六进制)。
需要注意的是,内存的基本单位是字节,它以字节为存储单位储存,每个字节是8个二进制位,即8个bit。