这段求结构体大小的代码 【求解】

奋斗的IT青年 2013-03-19 10:47:08
#include <stdio.h>

struct BBB
{
long num;
char* name;
short int data;
char ha;
short ba[5];
}*p;

void main(void)
{
p=NULL;
printf("sizeof(*p):%d\n", sizeof(*p)); //24
printf("p:%d\n", p); //0x0
printf("p+0x200:%d\n", p+0x200); //0xx+0x200*24
printf("(unsigned long)p+0x200:%d\n", (unsigned long)p+0x200); //0x0+0x200
printf("(char*)p+0x200:%d\n", (char*)p+0x200); //0x0+0x200
printf("(int*)p+0x200:%d\n", (int*)p+0x200); //0x200*4
}

代码后面的注释,是计算机用VC运行的结果。结构体p的大小是24没问题,后面的看蒙了。
请教高手!!!
...全文
95 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
一群人的拼搏 2013-03-20
  • 打赏
  • 举报
回复
这个后面的注释硕的是比较清楚的...自己用debug试试,就知道了!!
kevin_khb 2013-03-19
  • 打赏
  • 举报
回复
1,p=NULL,一般来说现代计算机的空指针都放在地址开始处,就是0X0000000,你输出格式是%d,打印就是0。 2,指针p的类型是struct BBB *,那p+1就相当于p的地址加上p所指向类型的大小,也就是sizeof(struct BBB)。 3,你将指针p强制转换为unsignde long,那它加0X200就是代数运算了。 4,同2,char的大小为1。 5,int在32位机下大小为4。 其实就一个问题,指针加减运算是指针起始地址和步长(指针所指向的内存类型的大小)运算。

69,373

社区成员

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

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