C和指针之联合体大小

来源:互联网 发布:金山数据恢复大师下载 编辑:程序博客网 时间:2024/06/06 02:08

1、联合体的特点和大小

union是共用一个内存首地址,联合体中每个成员的地址都相同,等于联合体变量的首地址
联合体的大小足够容纳最宽的成员,大小能被其包含的所有基本数据类型的大小所整除





2、测试Demo

#include <stdio.h>union var {long int a;int b;};union size{int a;double b;char c[11];};int main(){union var v;v.a =  3.14;printf("v.b is %d\n", v.b);v.b = 6;printf("v.a is %ld the address is %p\n", v.a, &v.a);printf("v.b is %d the address is %p\n", v.b, &v.b);union size union_first;union size union_second;union size union_third;//大小足够容纳最宽的成员,大小能被其包含的所有基本数据类型的大小所整除printf("the sizeof union_first is %d\n", sizeof(union_first));printf("the sizeof union_second is %d\n", sizeof(union_second));printf("the sizeof union_third is %d\n", sizeof(union_third));printf("sizeof(long int) is %d\n", sizeof(long int));printf("the sizeof var is %d\n", sizeof(union var));//联合体中每个成员的地址都相同,等于联合体变量的首地址printf("the union_first address is 0x%x\n", &union_first);printf("the union_first.a  address is 0x%x\n", &union_first.a);printf("the union_first.b address is 0x%x\n", &union_first.b);printf("the union_first.c address is 0x%x\n", union_first.c);union_first.a = 1;printf("the union_first.b is %d\n", union_first.b);printf("the union_second.c[0] is %d\n", union_first.c[0]);return 0;}





3、运行结果

v.b is 5v.c is 1v.a is 6 the address is 0x7ffe26877060v.b is 6 the address is 0x7ffe26877060the sizeof union_first is 16the sizeof union_second is 16the sizeof union_third is 16sizeof(long int) is 8the sizeof var is 8the union_first address is 0x26877070the union_first.a  address is 0x26877070the union_first.b address is 0x26877070the union_first.c address is 0x26877070the union_first.b is 1the union_second.c[0] is 1





原创粉丝点击