首页 > 其他分享 >C语言 联合体(共用体)学习笔记

C语言 联合体(共用体)学习笔记

时间:2024-11-07 15:15:42浏览次数:6  
标签:00 int 联合体 C语言 char union printf 共用

一、联合体(共用体)的定义

        联合体是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员共用一块空间(所以联合体也叫共用体)。

        联合体的声明格式:

union Un  //去掉联合体名即为匿名联合
{
	char c;
	int i;
};

二、联合体的特点

        联合体的成员是共用一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小
(因为联合至少有能力保存最大的那个成员)。

三、联合体大小的计算

        1.联合体的大小至少是最大成员的大小

        2.当最大成员不是最大对齐整数倍的时候,就要对齐到最大对齐数的整倍数

例如:

union Un1
{
    char c[5];
    int i;
};

union Un2
{
    char arr[5];//对齐数是1
    int i;
};

union Un3
{
    short c[7];//14
    int i;//4
};

union Un4
{
	char c1;
	char c2;
	char c3;
	char c4;
	char c5;
	
	int i;
};

int main()
{
    //输出结果为8
    printf("%d\n",sizeof(union Un1));
    //输出结果为8
    printf("%d\n",sizeof(union Un2));
    //输出结果为16
    printf("%d\n",sizeof(union Un3));
    //输出结果为4
    printf("%d\n",sizeof(union Un4));
    
    return 0;
}

四、使用联合体判断大小端

        大小端是计算机的的两种储存模式。

        大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中

        小端模式:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中

int check_sys()
{
	union Un
	{
		char c;
		int i;
	}u;
	u.i = 1;
	return u.c;
}

int main()
{
	int a = 1;//0x 00 00 00 01
	//假设地址是  低----->高
	//按小端存储  01 00 00 00
	//按大端存储  00 00 00 01

	int ret = check_sys();

	if (ret == 1)
		printf("小端\n");
	else
		printf("大端\n");
	 
	return 0;
}

        

标签:00,int,联合体,C语言,char,union,printf,共用
From: https://blog.csdn.net/a282828282/article/details/143593299

相关文章

  • c语言中函数体中的变量声明不能使用和形参相同的变量名
     001、[root@PC1test]#lstest.c[root@PC1test]#cattest.c#include<stdio.h>intmax(inta,intb)//创建一个名为max的函数{intk=100;if(a>b){returna;}......
  • 【C语言】实战-力扣题库:回文链表
    题目描述给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。提示:链表中节点数目在范围[1,105] 内0<=Node.val<=9进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?问题分析O(1)的时间复杂度---跟n......
  • 【C语言】分支和循环详解(下)猜数字游戏
    与诸君共进步!!!!!文章目录1.随机数的生成2.猜数字小游戏的实现1.随机数的生成掌握了前⾯学习的这些知识,我们就可以写⼀些稍微有趣的代码了,⽐如:写⼀个猜数字游戏游戏要求:电脑⾃动⽣成1~100的随机数玩家猜数字,猜数字的过程中,根据猜测数据的⼤⼩给出⼤了或⼩了的......
  • C语言---文件操作万字详细分析(6)
    文件操作到这里,C语言所有知识点,就告已段落了,虽然知识点到这里结束了,但我想,我们的编程之路也可能刚刚开始,这些知识,是我们在创造伟大事物时,必不可少的基础,是我们未来财富自由之路,必不可少的垫脚之石。相信大家会变得越来越牛逼!不废话了,Let’sstart!一、文件指......
  • C语言数据结构--详细讲解算法复杂度
    C语言数据结构-算法复杂度前言一、时间复杂度1.大O渐进表示法2时间复杂度的计算二、空间复杂度1.什么是空间复杂度2时间复杂度的计算总结前言我们都清楚计算机存储和组织数据是通过数据结构来实现的。当计算机对这些数据结构中的数据进行遍历等操作时,这个过程就......
  • 2个月搞定计算机二级C语言——真题(9)解析
    1.前言本篇我们讲解2个月搞定计算机二级C语言——真题92.程序填空题2.1题目要求2.2提供的代码#include<stdio.h>doublef1(doublex){returnx*x;}doublef2(doublex,doubley){returnx*y;}/**********found**********/__1__fun(int......
  • 重温c语言之,7天开整,就是随便的写写,第七天
    一:素数又见素数但这次不一样,这次需要用到函数,利用函数来将素数区分出来,直接上代码1#include<stdio.h>2#include<math.h>3intprime_num(intnum)4{5for(inti=2;i<sqrt(num);i++)6{7if(num%i==0)8{9......
  • c语言中多个变量连续赋值
     001、[root@PC1test]#lstest.c[root@PC1test]#cattest.c##测试c程序#include<stdio.h>intmain(void){inti,j;i=j=5;//连续赋值printf("i=%d\n",i);printf("j=%......
  • c语言中声明数组时, 元素个数必须使用常量表达式
     001、[root@PC1test]#lstest.c[root@PC1test]#cattest.c##测试程序#include<stdio.h>intmain(void){intvar1=5;//初始化一个变量var1intarray1[var1]={3,5,8,4,9};//初始化数组return0;}[......
  • c语言入门4——函数
    4-1判断数字字符编写函数,判断指定的字符是否是数字字符,如果是函数返回1,否则函数返回0.要求在主调函数中输入该字符,调用函数并输出判断结果。输入格式:在一行中给出1个字符。输出格式:对于给定输入的字符,输出判断结果yes或no。输入样例:6输出样例:yes输入样例:H输......