1、关于结构
将不同类型的变量组合起来,方便用户管理变量。
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int value[10];
char ch;
char ch2;
int value2;
}node;
int main()
{
int m = (unsigned int)&(((node *)0)->value2);//把0强制转换成struct *类型的指针,该结构体的首地址为0,取其偏移地址
printf("%d",m);
return 0;
}
2、关于共同
把一个数据以不同的形式呈现出来,便于在不同的情景下使用。
#include <stdio.h>
#include <stdlib.h>
union bit32_tag{
int whole;
struct {char c0,c1,c2,c3;}byte;
}value;//这个联合允许程序员提取32位值,也可以提取单独的字节字段如value.byte.c0
int main()
{
value.whole= 0xfeafbc97;
printf("0 -31:%x\r\n",value.whole);
printf("0 - 7:%x\r\n",value.byte.c0);
printf("8 -15:%x\r\n",value.byte.c1);
printf("16-23:%x\r\n",value.byte.c2);
printf("24-31:%x\r\n",value.byte.c3);
return 0;
}