首页 > 试题广场 >

根据下面程序,a和b输出的结果是?

[填空题]
char *p1;int64 *p2;
p1=(char *)0x800000;
p2=(int64 *)0x800000;
char *a=p1+2
int64_t *b=p2+2
那么a=1,b=2
推荐
答:0x800002, 0x800010
我们定义指针的时候给指针一个类型就是为了方便指针的加减操作。p1是char类型指针,每个char占一个字节,所以p1+2就是在p1的基础上加2个char的长度,就是两个字节。p2是指向64位int型的指针,所以p2+2就是p2加上两个64位int的长度,也就是加上128位,即16个字节。用16进制表示是0x10
所以a=0x800000+0x2=0x800002
a=0x800000+0x10=0x800010
编辑于 2015-01-30 11:59:35 回复(7)
tian na ,yuan lai shi jia de zhizhen,,,,,…^-^
发表于 2015-11-24 06:59:37 回复(1)
提问 
字符指针P1不是4个字节吗?
发表于 2015-07-21 19:25:02 回复(3)
指针里面存的是地址,所以指针的加减也是为了求得变化后的地址,即假设指针的类型是T,那么新的地址应该就是原地址+sizeof(T)个字节后得到的地址,也就是说它加的实质还是相应的字节数,而这个字节数是多少得看指针的类型,本题中第一个是char类型,那么加2就是俩个字节,第二个是64位的int,那么相应的指针类型就是8字节,因为指针就是为了寻地址的,与cpu的位数有关,一个字节8位,因此它加2就是加2*sizeof(int64),转16进制为0x1
发表于 2015-08-20 21:55:31 回复(3)
我觉得你们说的都对
发表于 2019-09-04 05:51:13 回复(0)
十六进制,16转换成了10
发表于 2017-07-01 06:36:02 回复(0)
发表于 2017-06-29 12:02:59 回复(1)
做这种题的时候要注意16在16进制下就是10,在笔试时尤要注意不要写错了
发表于 2017-03-14 20:27:07 回复(0)
int64_t能保证这个int数据长度为64位,即8字节。
发表于 2017-01-19 17:21:28 回复(0)
p1,p2指针一开始都指向0x800000,p1+2,不是指针向后移动2个字节吗,此时a是0x800000+2=0x800002吗?
同理p2向后移动16字节,是0x800000+16=0x800010
如下:
        int p = 10;
int *q = &p;
cout << q << endl;
q++;
cout << q << endl;
return 0;


发表于 2016-09-20 15:28:32 回复(0)
要注意是以指针对应类型所占字节大小进行加减
发表于 2016-06-08 07:46:37 回复(0)
a = 0x800002
b =  0x800010
发表于 2015-09-09 10:24:06 回复(0)
cyi头像 cyi
为什么,我测试的时候,p1没有指向地址0x800000呢,求指点
发表于 2015-08-16 11:46:09 回复(2)
int64==占8个字节;
8*2=16;=0x10;
发表于 2015-08-01 12:52:59 回复(2)
a=0x800002,b=0x800010
注意是16进制数
发表于 2015-01-21 16:09:45 回复(0)
int 64_t *   是什么意思?
发表于 2015-01-12 16:34:33 回复(1)