#include<stdio.h>
struct node{
char a;
int b;
short c;
};
struct n{
char a;
int b;
};
int main(int argc,char*argv[])
{
struct node a[2]={{1,2,3},{4,5,6}};
*(int *)((char*)a+2*sizeof(struct n))=100;
for(int i=0;i<2;i++)
printf("%d ",a[i]);
return 0;
}
a[1][1]被改变,也就是5变成了100
具体解释如下:
2*sizeof(n)=2*8=16;
(char*)a+2*sizeof(struct n)这里相当于a从首地址移动16个字节
sizeof(node)=12(字节补齐4+4+4),也就是一个node结构体元素占12个字节
所以,从a移动16个字节后,正好到a[1].b的首地址
所以,*(int *)((char*)a+2*sizeof(struct n))=100就等价于a[1].b=100
也就是5变成100