20

cosmos701 2011-09-22 03:42:50
在对齐为4的情况下
struct BBB
{
long num; 4
char *name; 4
short int data; 2
char ha; 1
short ba[5];
}*p;
p=0x1000000;
p+0x200=____;
(Ulong)p+0x200=____;
(char*)p+0x200=____;
希望各位达人给出答案和原因,谢谢拉
解答:假设在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
这个懂了 每次p+1其实都是移动一个结构体大小的长度
=================================
(Ulong)p+0x200=____;
= 0x1000000 + 0x200

(char*)p+0x200=____;
= 0x1000000 + 0x200*4
这两个没看懂啊 为什么是这样了?????
求解释
...全文
62 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
int x;

int p = (int)&x;
cout << p << endl;
cout << (int)((char *)p + 1);

这个就相当于 p + 1;
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ouyh12345 的回复:]

先转类型,再计算
(Ulong)p+0x200就是2个无符号整数相加
(char*)p+0x200
p是char *,而sizeof(char *) = 4,所以(char*)p+0x200= 0x1000000 + 0x200*4
[/Quote]
所以(char*)p+0x200=0x1000000 + 0x200*sizeof(char)而不是sizeof(char *)
AnYidan 2011-09-22
  • 打赏
  • 举报
回复
(char*)p+0x200=____;
= 0x1000000 + 0x200*4
sizeof(char *) = 4 bytes,因此4 是步长


(Ulong)p+0x200=____;
= 0x1000000 + 0x200
Ulong -- 什么东东?
ouyh12345 2011-09-22
  • 打赏
  • 举报
回复
先转类型,再计算
(Ulong)p+0x200就是2个无符号整数相加
(char*)p+0x200
p是char *,而sizeof(char *) = 4,所以(char*)p+0x200= 0x1000000 + 0x200*4

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧