C语言32个关键字
有32个关键字详细说明,还有跳转链接!
union 是C语言中一种声明共用体的数据类型。
union(共用体)在某种程度上类似struct(结构体)的一种数据结构,可以包含很多数据结构和变量。
union(共用体)的特点:其内部的数据 共用一个内存首地址,共享同一段内存,以达到节省空间的目的。
一般形式具体如下:
union 共用体名 { //成员列表 数据类型 成员名; 数据类型 成员名; .... }
举例说明如下:
union _MQ { char data8[4]; int data32; };
一般形式具体如下:
union _MQ { char data8[4]; int data32; }; //定义共用体变量 union _MQ mq;
合并简化形式具体如下:
union _MQ { char data8[4]; int data32; }mq;
匿名结构体形式具体如下:
union { char data8[4]; int data32; }mq;
一般形式如下:
typedef union MQ { char data8[4]; int data32; } _MQ; //定义共用体变量,以下两种效果一样 union MQ mq; _MQ mq;
匿名共用体形式具体如下:
typedef union { char data8[4]; int data32; } _MQ; //定义共用体变量 _MQ mq;
初始化定义时----赋值
typedef union { char data8[4]; int data32; }_MQ; _MQ mq = { .data32=0x12345678 };
初始化后----赋值
mq.data32=0x12345678;
#include <stdio.h> typedef union { char data8[4]; int data32; }_MQ; _MQ mq = { .data32=0x12345678 }; int main(int argc, char *argv[]) { printf("data[0]=0x%x\n",mq.data8[0]); printf("data[1]=0x%x\n",mq.data8[1]); printf("data[2]=0x%x\n",mq.data8[2]); printf("data[3]=0x%x\n",mq.data8[3]); return 0; }
运行结果如下:
我的电脑系统是小端模式
大端模式(高字节在前) | 小端模式(低字节在前) | |||||||
---|---|---|---|---|---|---|---|---|
data32 | data[0] | data[1] | data[2] | data[3] | data[0] | data[1] | data[2] | data[3] |
0x12345678 | 0x12 | 0x34 | 0x56 | 0x78 | 0x78 | 0x56 | 0x34 | 0x12 |
union(共用体) 占用的内存空间,是由其中占用内存最大的成员变量决定的。
#include <stdio.h> typedef union { char data1; int data2; float data3; double data4; }_MQ; _MQ mq; int main(int argc, char *argv[]) { printf("data1占用的%d字节\n",sizeof(mq.data1)); printf("data2占用的%d字节\n",sizeof(mq.data2)); printf("data3占用的%d字节\n",sizeof(mq.data3)); printf("data4占用的%d字节\n",sizeof(mq.data4)); printf("共用体占用的%d字节\n",sizeof(mq)); return 0; }
运行结果如下:
具体程序如下:
#include <stdio.h> typedef union { int data; struct { int a:1;//第0位 int b:2;//第1,2位 int c:3;//第3,4,5位 int d:4;//第6,7,8,9位 int e:6;//第10,11,12,13,14,15位 }bit; }_MQ; _MQ mq= { .bit.a = 1, .bit.b = 3, .bit.c = 6, .bit.d = 10, .bit.e = 26 }; int main(int argc, char *argv[]) { printf("data=0x%x\n",mq.data); return 0; }
运行结果如下:
解释说明:
变量 | 15 14 13 12 11 10 | 9 8 7 6 | 5 4 3 | 2 1 | 0 |
---|---|---|---|---|---|
a(1) | 1 | ||||
b(3) | 11 (3) | ||||
c(6) | 110 (6) | ||||
d(10) | 1010 (10) | ||||
e(26) | 011010 (26) |
结果是0b0110101010110111=0x6ab7