用pb针对B的操作会让 a变量的值改变,因为其实是针对起始地址的偏移内存操作
由于两个类型内存结构相同 所以成员偏移也相同
#include <stdio.h>
struct A
{
int i;
int j;
char c;
double d;
};
struct B
{
int i1;
int j1;
char c1;
double d1;
};
int main()
{
struct A a;
struct B* pb = (struct B*)(&a);
printf("struct A.i = %d\n",a.i);
pb->i1 = 1;
pb->j1 = 2;
pb->c1 = 'c';
pb->d1 = 3;
printf("struct A.i = %d\n",a.i);
return 0;
}
A B 在内存空间排布一样,其实就是相当于 将B的内存空间 扣上A的类型模子,通过A访问B空间
本文探讨了C语言中结构体A和B通过指针pb进行操作时,如何实现对A变量值的修改。通过将B类型的指针指向A类型的起始地址,实现了对同一内存空间的不同访问方式,展示了结构体成员偏移与内存布局的重要性。
27万+

被折叠的 条评论
为什么被折叠?



