首页 > 其他分享 >嵌入式-C语言基础:联合体和共用体的概念

嵌入式-C语言基础:联合体和共用体的概念

时间:2022-11-06 22:14:40浏览次数:54  
标签:联合体 嵌入式 125 printf C语言 data1 data3 data2

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

结构体和共用体的区别:

(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的大小内存分配。

 

标签:联合体,嵌入式,125,printf,C语言,data1,data3,data2
From: https://www.cnblogs.com/zxtang/p/16864317.html

相关文章

  • c语言学习--静态函数
    静态函数 #include<stdio.h>//这是静态函数,静态函数只能在当前文件调用,其他文件下面的函数是没法调用到这个函数的staticvoidfun1(){printf("helloworld"......
  • C语言学习---星花与取地址&----以及多级指针
    #include<stdio.h>intmain{//对一个表达式加*,就会对表达式减一级星花*,//如果对表达式取&,就会加一级*int*p;int**q;q......
  • 【单片机/嵌入式】【梁山派】学习日志08:串口通信USART
    串口一、串口通信原理1.1串口基础知识1.1.1串口介绍串口是指外设和处理器之间通过数据信号线、地线和控制线等,按位进行传输数据的一种通讯方式。尽管传输速度比并行传......
  • C语言_03
    Video4回顾define不是关键字,只是一种指令。while循环中不能出现continue,但是可以出现if指针&-取地址操作符int*或者double*等代表后面的变量为指针变量比如:inta=10,int*......
  • C语言数据结构 -BST 树的常规操作
       #include<iostream>#include<queue>//bst树structnode{node*lchild;node*rchild;intdata;};voidinsert(node**root,intval)......
  • c语言的判断与循环
    前言:C语言所编写的程序是一个结构化程序我们的生活中时时刻刻都离不开三种结构:1.顺序结构;2.选择;3.循环。我们的世界就是由这三种结构组成,无时无刻我们都在作出选择,每一天的......
  • C语言运算符优先级
    C语言的运算符包括单目运算符、双目运算符、三目运算符,优先级如下:第1优先级:各种括号,如()、[]等、成员运算符.;第2优先级:所有单目运算符,如++、–、!、~等;第3优先级:乘法运算......
  • C语言初级阶段4——数组2————二维数组
    C语言初级阶段4——数组2————二维数组二维数组的定义:类型说明符数组名[数组大小][数组大小]第一个大小是行的大小,第二个大小是列的大小。二维数组的初始化:{}#in......
  • C语言初级阶段4——数组3——字符数组
    C语言初级阶段4——数组3——字符数组字符数组的定义:储存字符类型数据的集合1.注意:如果用字符串给字符数组初始化,那么不需要{},但是要有""。2.%s:用来输出字符串的格式......
  • C语言初级阶段5——函数1
    C语言初级阶段5——函数1函数的基本概念1.函数:理解为封装功能的容器。主函数是函数的入口2.函数定义的基本格式:返回值类型:常用的基本数据类型,执行完以后,函数会得到一......