十六 推算程序结果 结构体指针
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。