十六 推算程序结果 结构体指针

struct Test
{
int num;
char *pc;
short data;
char c[2];
short sa[4]
} *p;
假设p的值为0x10000,问
p+0x1=?
(unsigned long)p+0x1=?
(unsigned int*)p+0x1=?

解析:
p+1=sizeof(struct Test)
int num——4字节
char *pc——4字节(指针都是4Byte)
short data + char c[2]——4字节(字节对齐)
short sa[4]——8字节
总共20字节。
∴p+0x1=0x10014。


(unsigned long)p+0x1=0x10000+0x01=0x10001 (转换后的p不再是指针,单纯加1)

(unsigned int *)p+0x01=0x10000+4Bytes=0x10000+4=0x10004。

posted @ 2020-02-04 10:50  wuqi1003  阅读(143)  评论(0编辑  收藏  举报