1、
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
请间pl+5=;
p2+5=;
答:unsigned char为一个字节大小,所以p1+5表示向后移动5个字节,移动一个字节加一,故p1+5 = 0x801005,unsigned long为四个字节大小,所以p2+5表示向后移动20个字节,因为是16进制,故为14(16+4),故p2+5 = 0x810014.
2、要对绝对地址0x100000赋值,我们可以用
(unsigned int *)0x100000 = 1234;
那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?
答:可以用函数指针来写,首先定义一个函数指针
// 函数指针的声明
void (* FunP)();
int main()
{
// 将函数指针设置为绝对地址 0x100000
FunP = (void (*)())0x100000;
// 通过函数指针调用地址 0x100000 处的代码
FunP();
}