有时候同一块内存空间存放类型不同,不同类型的变量共享一块空间。

结构体和共用体的区别:

(1)结构体元素有各自单独空间,共用体元素共享空间,空间大小由最大类型确定。

(2)结构体元素互不影响共用体赋值会导致覆盖。

#include<stdio.h>
#include<string.h> struct TestT
{
int data1;//4
char data2[125];//125
double data3;//8
}; union TestU
{
int data1;//4
char data2[125];//125
double data3;//8
}; int main()
{
struct TestT t;
union TestU u;
printf("结构体的大小=%d\n",sizeof(t));
printf("data1:%p\n",&t.data1);
printf("data2:%p\n",&t.data2);
printf("data3:%p\n",&t.data3);
printf("联合体的大小=%d\n",sizeof(u));
printf("data1:%p\n",&u.data1);
printf("data2:%p\n",&u.data2);
printf("data3:%p\n",&u.data3);
return 0;
}

输出结果:

结构体的大小=144
data1:000000000061FD90
data2:000000000061FD94
data3:000000000061FE18
联合体的大小=128
data1:000000000061FD10
data2:000000000061FD10
data3:000000000061FD10
输出的结构体和联合体的大小貌似有点难以理解的地方,其实这里涉及到一个字节对齐的问题,即C语言默认是8字节对齐,即以8个字节为一个单位,不满8个字节的,还是会给你按照8个字节的内存大小来计算,所以结构体的大小就是8(4不满8,按照8来计算)+128(125+3)+8=144;联合体最大变量大小为125,会按照128的大小内存分配。

嵌入式-C语言基础:联合体和共用体的概念的更多相关文章

  1. 嵌入式-C语言基础:通过结构体指针访问结构体数组

    #include<stdio.h> #include<string.h> struct Student { char name[32]; int age; int height ...

  2. 转:union 联合体(共用体)

    转自:http://blog.csdn.net/xiao3404/article/details/22276485 2.共用体 2.1共用体的概念 共用体是一种构造类型的数据结构.在一个“共用体”内可 ...

  3. C语言高级-结构,共用体,文件,链表

    C语言结构 标准声明方式 struct student{        int age;        char sex;    }; 这个可以在main函数中定义:  struct student ...

  4. C语言-10-位域与共用体

    位域 在某种特定情况下,一个结构体中的多个变量只使用各自存储空间的几位,而其他位从来不使用.这种情况下,可以使用位域来限定每个变量的用来存储数据的位宽. 作用 限定结构体中变量用来存放数据的位宽,即使 ...

  5. 嵌入式-C语言基础:结构体

    数组只能存放一种类型的数据,而结构体内可以存放不同类型的数据. #include<stdio.h> #include <string.h> struct Student { c ...

  6. Go语言基础六:结构体和方法

    结构体 结构体是一个由用户定义的复合类型,它由一系列属性组成,每个属性都有自己的类型和值.Go语言中数组可以存储同一类型的数据,但在结构体中用户可以为不同项定义不同(或相同)的数据类型.结构体是值类型 ...

  7. 黑马程序员——C语言基础 变量类型 结构体

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)变量类型 1)局部变量 1> 定义:在函数内部定义的变量,称为 ...

  8. 嵌入式-C语言基础:字符串比较函数strcmp及其实现

    #include<stdio.h> #include <string.h> int mystrcmp(char * p1,char * p2) { int ret=0; if( ...

  9. 嵌入式-C语言基础:字符串拼接函数strcat

    #include<stdio.h> #include <string.h> //实现字符串拼接 char * mystrcat(char * dest,char * src) ...

随机推荐

  1. 【MySQL】从入门到掌握2-下载安装

    上期:[MySQL]从入门到掌握1-一些背景知识 第一章:下载 官网下载地址: https://dev.mysql.com/downloads/mysql/ https://dev.mysql.com ...

  2. Mybatis-Plus使用@TableField实现自动填充日期

    一.前言 我们在日常开发中经常使用ORM框架,比如Mybatis.tk.Mybatis.Mybatis-Plus.不过最广泛的还是Mybatis-Plus,我们的一些表,都会有创建时间.更新时间.创建 ...

  3. Python入门系列(四)别再傻傻分不清:列表、元组、字典、集合的区别

    总结分析列表.元组.字典.集合的相同与区别之处,只有彻底分清之后,就会在应用的时候,得心应手. 四句话总结 列表是一个有序且可更改的集合,允许重复成员. 元组是一个有序且不可更改的集合,允许重复成员. ...

  4. Html飞机大战(三):定义状态

    好家伙, 1.为飞机大战定义状态 1.开始 START 有一个飞机大战LOGO &天空 2.开始时 STRATING 有一个飞机加载的界面&天空 3.运行时 RUNNING 我方飞机& ...

  5. 第三十八篇:vue3路由

    好家伙,水博客怎么说 1.0.安装:简简单单的淘宝镜像安装 装一下淘宝镜像(一般都有) npm install -g cnpm --registry=https://registry.npm.taob ...

  6. ubuntu 搭建网络文件系统

    一.安装 miniserver sudo curl -L https://github.com/svenstaro/miniserve/releases/download/v0.4.1/miniser ...

  7. HBase集群部署与基础命令

    HBase 集群部署 安装 hbase 之前需要先搭建好 hadoop 集群和 zookeeper 集群.hadoop 集群搭建可以参考:https://www.cnblogs.com/javammc ...

  8. docker-compose入门--翻译

    在这一页,你将学习到如何构建一个简单的python的web应用,并通过Docker compose来运行.这个应用程序使用的是Flask框架,并维护着一个存储在reids里的点击计数器.由于这个案例使 ...

  9. 获取客户端访问真实 IP

    转载自:https://www.qikqiak.com/post/get-client-realip/ 通常,当集群内的客户端连接到服务的时候,是支持服务的 Pod 可以获取到客户端的 IP 地址的, ...

  10. Python 类型提示简介

    Python 3.6+ 版本加入了对"类型提示"的支持. 这些"类型提示"是一种新的语法(在 Python 3.6 版本加入)用来声明一个变量的类型. 通过声明 ...