struct s
{
int a;
double b;
char c;
}s;
typedef struct s
{
int a;
double b;
char c;
}s1;
首先与数组相比,数组在初始化时必须给大小,其次数组要求类型一致。
对于结构体元素的使用“.”与“->”的本质是:
s.a =>int *p=(int*)((int)&s+0);
s.b =>double *p=(double *)((double )&s+8);
s.c =>char*p=(char*)((char)&s+16);
使用时:
printf("%d\n",*((int*)((int)&s+0)));=>相当于解引用
后面的内存偏移量,涉及到前面文章说到的内存对齐规则,可以如果下图没看懂意思的可以去前几篇关于结构体的文章进行学习。
本次实验是在windows中使用CodeBlocks的默认编译器进行编译,固然与Linux结构体对齐规则不同,根据不同的结构体对齐规则,后面的偏移量也就不同,这就是使用结构体时,编译器对其进行处理的原理。