华为3com的一道面试题
在对齐为4的情况下
struct BBB
{
long num;
char *name;
short int data;
char ha;
short ba[5];
}*p;
p=0x1000000;
p+0x200=____;
(Ulong)p+0x200=____;
(char*)p+0x200=____;
希望各位达人给出答案和原因,谢谢拉
问题点数:20、回复次数:16Top
1 楼guigui_2001(*和风一起飞*)回复于 2006-03-21 12:42:34 得分 0
假设在32位CPU上,
sizeof(long) = 4 bytes
sizeof(char *) = 4 bytes
sizeof(short int) = sizeof(short) = 2 bytes
sizeof(char) = 1 bytes
由于是4字节对齐,
sizeof(struct BBB) = sizeof(*p)
= 4 + 4 + 2 + 1 + 1/*补齐*/ + 2*5 + 2/*补齐*/ = 24 bytes (经Dev-C++验证)
p=0x1000000;
p+0x200=____;
= 0x1000000 + 0x200*24
(Ulong)p+0x200=____;
= 0x1000000 + 0x200
(char*)p+0x200=____;
= 0x1000000 + 0x200*4
你可以参考一下指针运算的细节Top
2 楼Helloooooo(每天,我都新的)回复于 2006-03-23 13:41:31 得分 0
UPTop
3 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-23 15:54:18 得分 0
我手边暂时没有调试的环境,对这个有点疑问:
(char*)p+0x200=____;
= 0x1000000 + 0x200*4
应该是
(char*)p+0x200
= 0x1000000 + 0x200*1
p强制转型为指向char的指针,每加1应该是一个byte吧?这个时候也会要求四字节对齐?Top
4 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-23 16:14:54 得分 0
自己刚刚测了一下,我的是对的:
(char*)p+0x200
= 0x1000000 + 0x200*1
Top
5 楼benh(滴答)回复于 2006-03-23 16:54:33 得分 0
为什么第一个p要乘24呢?Top
6 楼smartcomplier(坚强的泡沫)回复于 2006-03-23 17:02:11 得分 0
头比较晕.......Top
7 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-23 17:11:27 得分 0
to benh(滴答) :
guigui_2001(*和风一起飞*) 已经说得很清楚了:
sizeof(long) = 4 bytes
sizeof(char *) = 4 bytes
sizeof(short int) = sizeof(short) = 2 bytes
sizeof(char) = 1 bytes
由于是4字节对齐,
sizeof(struct BBB) = sizeof(*p)
= 4 + 4 + 2 + 1 + 1/*补齐*/ + 2*5 + 2/*补齐*/ = 24 bytesTop
8 楼benh(滴答)回复于 2006-03-23 17:15:26 得分 0
p+0x200是什么意思?加上200个结构体空间占用的地址?为什么不是直接在地址空间上加上200呢?Top
9 楼jinjiajie(leorio)回复于 2006-03-23 17:38:10 得分 0
0x200是迷惑,只是=p+512Top
10 楼liyusen007(森)回复于 2006-03-23 17:41:22 得分 0
关键在理解指针的类型和指针的+操作Top
11 楼jinjiajie(leorio)回复于 2006-03-23 18:02:34 得分 0
(Ulong)p+0x200=____;
= 0x1000000 + 0x200
这个我有疑问....ulong是4字节的吧?为什么强转过来后会只+1*0x200Top
12 楼manplus(魅力加加)回复于 2006-03-23 18:03:41 得分 0
mark
Top
13 楼liyusen007(森)回复于 2006-03-23 19:25:36 得分 0
(Ulong)p+0x200=____;
= 0x1000000 + 0x200
这个我有疑问....ulong是4字节的吧?为什么强转过来后会只+1*0x200
//////////////////////
请注意:这时将P转换为(Ulong)型,已经不是指针了。不能够再进行取值操作!Top
14 楼guigui_2001(*和风一起飞*)回复于 2006-03-23 19:55:20 得分 0
自己刚刚测了一下,我的是对的:
(char*)p+0x200
= 0x1000000 + 0x200*1
=====================
谢谢 universes(universes),
的确是这样,
当时想当然就写了:(
Top
15 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-24 08:46:47 得分 0
(Ulong)p+0x200=____;
= 0x1000000 + 0x200
这个我有疑问....ulong是4字节的吧?为什么强转过来后会只+1*0x200
------------------------------------------------------------------
(Ulong)p+0x200=____;
= 0x1000000 + 0x200
你再和这个比较一下:
(Ulong *)p+0x200=____;
= 0x1000000 + 0x200*4
另,to guigui_2001(*和风一起飞*) :
呵呵,不客气,来这里就是一起学习的Top
16 楼cdo(Everything has a favourable turn)回复于 2006-03-24 14:06:45 得分 0
请注意:这时将P转换为(Ulong)型,已经不是指针了。不能够再进行取值操作!
//////////////////////////
呵呵,原来是这样,思维定视了.Top




