嵌入式C语言---struct & union

本文详细介绍了C语言中的结构体(struct)和共用体(union)的概念及用法。结构体用于组合不同类型的变量,而共用体则使得同一段内存可以用不同类型的名称访问。文中通过具体实例解释了它们的定义与使用,并对比了结构体与数组的区别。
摘要由CSDN通过智能技术生成
1、struct
没有结构体之前,在C语言中,数据的组织依靠:变量+数组。
最初最简单的时候,只需要使用基本数据类型(int char float double)来定义单个变量,需要几个变量就定义几个。
后来情况变复杂了,有时需要很多意义相关的变量(譬如需要存储及运算一个班级的学生分数)这时候数组出现了。数
组解决了需要很多类型相同、意义相关的变量的问题。但是数组是有限制的。数组最大的不足在于,一个数组只能存储很多个数据类型相同的变量。
所以碰到需要封装几个类型不同的变量的时候,数组就无能为力。
譬如对于题目:使用一个数据结构来保存一个学生的所有信息:姓名 学号 性别
这时候就需要结构体。

结构体与数组:在结构体之前定义数据的方式有单个变量定义(int a),有多个同一类型数据(int a[3]),而结构体可以定义多个不同类型的
数据。

//定义结构体 
struct Student
{
char name[20]; // 学生姓名
unsigned int num; // 学号
int isMale; // 性别
};


2、union
共用体union在定义和使用形式上,和结构体struct很相似。但是两种数据结构是完全不同的两类东西。
结构体,是对多个数据的组合与封装。
共用体,共用体中只有一个东西,只是它被好几个名字(和类型)共用。


// 定义共用体类型
union MyUnion
{
int a;
char b;
float c;
};


#include <stdio.h>


// 定义共用体类型
union MyUnion
{
int a;
char b;
float c;
};

//定义结构体 
struct Student
{
char name[20]; // 学生姓名
unsigned int num; // 学号
int isMale; // 性别
};

int main(void)
{
union MyUnion u1; // 使用自定义的union类型来定义变量
struct Student s;

printf("%d\n", sizeof(u1));
printf("%d\n", sizeof(s));

return 0;
}

struct和union在考题中同一出现sizeof()的考法,我在软考中曾经遇到,从定义中不能理解struct定义多个类型,
sizeof(u1)=sizeof(name)+sizeof(num)+sizeof(int)=28
union是同一个东西,被多个类型公用
sizeof(u1)=max(sizeof(a),sizeof(b),sizeof(c))=4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值