码迷,mamicode.com
首页 > 其他好文 > 详细

union

时间:2018-03-08 00:03:16      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:存储空间   include   种类   div   存在   proc   oat   覆盖   二次   

联合union

联合和结构体的区别:结构体为每一个成员分配存储空间,而联合体的内存大小采取最长成员所需的长度,联合变量只存在一个成员变量,所有成员共享同一片内存。

第二次为联合赋值会覆盖第一次赋值。

一个联合变量可以在不同时间存储多种类型的变量,节省内存。

#include<stdio.h>
#include<limits.h>
int main() {
    union {
        int i;
        signed char j;
        struct {
            float f;
            double d;
        }s;
    }num;
    num.i = INT_MAX;
    printf("union的字节数目是%d\n",sizeof(num));
    char* ptr = (char*)(&num);
    printf("%d %d %d %d\n",ptr[0],ptr[1],ptr[2],ptr[3]);
    printf("num.i = %u,地址是%p,num.j = %d,地址是%p\n",num.i,&num.i,num.j,&num.j);
    num.s.f = 0.1;
    num.s.d = 1.0;
    printf("num.s.f = %f,num.s.d = %lf",num.s.f,num.s.d);
}

union的字节数目是16
-1 -1 -1 127
num.i = 2147483647,地址是000000000062FE30,num.j = -1,地址是000000000062FE30
num.s.f = 0.100000,num.s.d = 1.000000
--------------------------------
Process exited after 0.8063 seconds with return value 0
请按任意键继续. . .

union

标签:存储空间   include   种类   div   存在   proc   oat   覆盖   二次   

原文地址:https://www.cnblogs.com/afreeman/p/8525168.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!