结构体地址计算问题?
我在参加多益网络的笔试题遇到到了以下一道题,不知道该如何做,请前辈们指点下,谢了。
struct {
int a;
char b;
long c;
short d;
short e[5];
}*p;
p=0x1000000;
p+0x200=?
(unsigned long*)p+0x200=?
(unsigned char*)p+0x200=?
struct {
int a; /*4 byte*/
char b; /* 4 byte, 因为对齐 */
long c; /* 4 byte */
short d; /*2 byte */
short e[5]; /* 10 byte */
}*p; /* 总共 24 byte, 结构体大小为8的倍数 */
p=0x1000000;
p+0x200=? 长度为结构体长度 乘 0x200(也就是512) 12K =0X3000 , 所以p+0x200=0x1003000
(unsigned long*)p+0x200=? 4*0x200 2K=0x800 p=0x1000800
(unsigned char*)p+0x200=? 1*0x200 p=0x1000200
p=0x1000000;
p+0x200; //(void*)((unsigned char*)p + sizeof(*p)*0x200)
(unsigned long*)p+0x200=? //(void*)((unsigned char*)p + sizeof(unsigned long)*0x200)
(unsigned char*)p+0x200=? //(void*)((unsigned char*)p + size(unsigned char)*0x200)
#pragma pack (4)
struct t_data{
int a;
char b;
long c;
short d;
short e[5];
}*p;
#pragma pack ()
int _tmain(int argc, _TCHAR* argv[])
{
p=(struct t_data*)0x1000000;
struct t_data* padd0 = p+0x200;
unsigned long* padd1 = (unsigned long*)p+0x200;
unsigned char* padd2 = (unsigned char*)p+0x200;
printf("%p %p %p\n",padd0,padd1,padd2);
}