ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言:共用体

2021-07-14 15:03:54  阅读:202  来源: 互联网

标签:20 union C语言 str printf 共用 data


这是很基础的教程,我只是写给自己看,作为一个学习笔记记录一下,如果正在阅读的你觉得简单,请不要批评,可以关掉选择离开

如何学好一门编程语言

  • 掌握基础知识,为将来进一步学习打下良好的基础。
  • 上机实践,通过大量的例题学习怎么设计算法,培养解题思路。
  • 养成良好的编码习惯,注释一定要写,要不然保你一周后自己写的代码都不认识了

   共用体允许我们在相同的内存位置存储多个不同数据类型的成员,但是任何时候只能有一个成员带有值。

共用体提供了一种使用相同的内存位置的有效方式。

定义共用体

  共用体的定义和结构体类似,共用体需要使用 union 语句,格式为:

union [共同体标签]
{
   成员定义;
   成员定义;
   ...
} [一个或多个共用体变量];

举例说明:

union Data
{
   int i;
   float f;
   char  str[20];
} data;

共用体标签 和 共用体变量 是可选的,

  共用体 占用的内存等于 最大成员的存储内存

#include <string.h>

union Data{
    int i;
    float f;
    char  str[20];
};

int main(){
    union Data data;
    char  str_1[20];
    float f_1;

    printf("数据占用的内存: %d\n", sizeof(f_1));     // 4
    printf("数据占用的内存: %d\n", sizeof(str_1));   // 20
    printf("数据占用的内存: %d\n", sizeof(data));    // 20

    return 0;
}

访问共用体成员,使用  共用体变量.成员 

#include <stdio.h>
#include <string.h>

union Data{
    int i;
    float f;
    char  str[20];
};

int main(){
    union Data data;

    data.i = 10;
    data.f = 220.5;
    strcpy(data.str, "C Programming");

    printf("data.i : %d\n", data.i);    // 1917853763
    printf("data.f : %f\n", data.f);    // 4122360580327794860452759994368.000000
    printf("data.str : %s\n", data.str);    // C Programming

    return 0;
}

我们发现共用体的 i 和 f 成员的值有损坏,因为最后赋给变量的值占用了内存位置,这也是 str 成员能够完好输出的原因。

  现在让我们再来看一个相同的实例,这次我们在同一时间只使用一个变量,这也演示了使用共用体的主要目的:

#include <stdio.h>
#include <string.h>

union Data{
    int i;
    float f;
    char  str[20];
};

int main(){
    union Data data;

    data.i = 10;
    printf("data.i : %d\n", data.i);    // 10

    data.f = 220.5;
    printf("data.f : %f\n", data.f);    // 220.500000

    strcpy(data.str, "C Programming");
    printf("data.str : %s\n", data.str);    //C Programming

    return 0;
}

在这里,所有的成员都能完好输出,因为同一时间只用到一个成员。

 

参考

菜鸟教程

标签:20,union,C语言,str,printf,共用,data
来源: https://www.cnblogs.com/LXP-Never/p/15010570.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有