69,368
社区成员
发帖
与我相关
我的任务
分享
efg_t* BBB= (efg_t*)( (char*)AAA+ 2 );
这个操作是AAA指向的内存向后偏移2个字节,然后把地址赋值给指针BBB;为什么是偏移2个字节呢,因为AAA在偏移前做了强制类型转换char *,否则偏移的长度就不是2了,而是sizeof(abc_t) * 2个字节了。
另外赋值的是内存首地址,因为不论是abc_t类型的指针,还是efg_t的指针,都是存放的地址值,因此不能说BBB编程AAA,而是AAA偏移2个字节的地址赋值给了BBB,这样BBB就可以按照efg_t类型去访问这块地址。若AAA指向的的空间小于BBB的空间,在使用BBB访问结构体成员时会导致越界。因此,需要AAA指向有效内存空间需要比BBB的结构体类型长度要大,至少大于等于sizeof(abc_t) - 2