目录
1.有以下代码:
struct A
{
bool b;
int arr[2];
int i;
int j;
};
int main()
{
A a;
a.b = false;
a.arr[0] = 1;
a.arr[1] = 2;
a.i = 20;
a.j = 30;
*(a.arr + 1) = 40;
A *p = 0;
unsigned int q = (unsigned int)(&p->i);
(*(int *)((char *)&a + q)) = -50;
return 0;
}
答案:i的值是20
解析:
A*p = 0;
unsigned int q = (unsigned int)(&p->i));
(*(int*)((char*)&a +q)) = -50;
考点1:结构体指针,结构体指针的访问方式为(p->i)
考点2:->优先级大于&,故而这里是取对象的成员相对地址
考点3:考虑字节4对齐,bool b后面有3个空字节,所以i的地址就是12. 即q=12
考点4:(char*)&a +q 先把a的地址转换成指向char型(即1个Byte)指针,然后指针往后移动q个Byte。
所以最后得出的结果是a.i的值为-50。