嵌入式C语言面试相关知识——结构体和联合体

嵌入式C语言面试相关知识------结构体和联合体

一、博客声明

  又是一年一度的秋招,怎么能只刷笔试题目呢,面试题目也得看,想当好厂的牛马其实也不容易呀O(∩_∩)O。注意:这篇博客大部分是来自网上的资源,通过自问或者他问,然后寻找答案,为了加深印象,总结或者抄一遍。


二、结构体

1、数组概念

  结构体是一种聚合数据类型,它允许将多个类型不同的变量组成一个整体。每个成员都有自己的内存空间,并且可以同时访问。

2、如何声明定义数组

  常用的就是基本结构体声明和使用typedef进行声明。

c 复制代码
struct Person {
	char name[50];
	int age;
};						//结构体类型的定义

struct Person p1;		//定义结构体变量

下面是使用typedef进行定义/

typedef struct {
	char name[50];
	int age;
} Person;

Person p1;

3、数组特点

  • 独立的内存空间: 结构体中的每个成员都有自己独立的内存位置,存储多个不同类型的数据。
  • 按顺序存储: 结构体中的成员按照定义的顺序排列在内存中。
  • 访问方式: 使用成员访问符号.来访问结构体的成员。
  • 内存大小: 结构体的总大小是所有成员大小之和,但可能存在内存对齐而导致的填充。

三、联合体

1、联合体概念

  联合体是一种特殊的数据类型,允许多个成员共用一块内存空间。即所有成员的值存储在同一个内存位置,任意时刻只能存储一个成员的数据。

2、如何声明定义联合体

c 复制代码
union MyUnion {
	int a;
	float b;
	char c;
};						//联合体类型的定义

union MyUnion myunion;		//定义联合体变量

下面是使用typedef进行定义/

typedef union {
	int a;
	float b;
	char c;
} Data;						//联合体类型的定义

Data data;

3、联合体特点

  • 共用内存空间: 联合体的所有成员共享一块内存,只有最大的那个成员决定联合体的大小。
  • 只能存储一个值: 因为所有成员共享内存,所以一个时间点只能存储一个成员的值,存储一个新成员会覆盖之前的值。
  • 访问方式: 与结构一样用.符号来访问联合体成员。
  • 内存大小: 占用内存最大的变量。

四、两者区别

特性 结构体 (struct) 联合体 (union)
内存分配 每个成员有独立的内存空间 所有成员共用同一块内存
大小 大小是所有成员的大小决定,具体看如何对齐 取决于最大成员的大小
同时存储 可以同时存储多个成员的数据 任意时刻只能存储一个成员的数据
数据访问 各成员可以独立访问,互补影响 访问一个成员会覆盖其他成员的数据
典型用途 用于存储一组相关的数据 用于存储多种类型的值,任意时刻只存一种
内存使用效率 内存利用率相对较低,占用空间多 内存利用率高,但风险大,数据容易被覆盖
相关推荐
怕浪猫8 小时前
Claude Code vs Codex:Computer Use 实现原理深度拆解
算法·面试·github
考研保研资料分享12 小时前
无论文竞赛保研中科院植物所:三场考核、科研追问与准备复盘
面试
救救孩子把12 小时前
AI面试八股文-23_23-Agent可观测性与生产监控面试题
人工智能·面试·职场和发展·agent·langsmith·langfuase
lhbweilai14 小时前
分析FreeRTOS内核对象API的源码实现(八)
c语言·开发语言·stm32·单片机
艾络迅Acceleronix15 小时前
环境监测终端:STM32+EG800Z AT+ 艾络迅平台实战|多传感器采集联动全流程
c语言·stm32·单片机·嵌入式硬件·物联网·1024程序员节
彭亚川Allen15 小时前
从零手搓 RAG 之 Embedding 技术
前端·后端·面试
Zwawa15 小时前
一只按键不只“按下”:短按、长按和连按如何共存
c语言·单片机·嵌入式
Sailing15 小时前
🚀🚀【封闭结束4】Agent 工具调用工程化:把 Tool Runtime 做扎实
人工智能·面试·agent
见叶之秋16 小时前
【C++】红与黑的边界:红黑树从插入到自检
数据结构·c++·算法·面试
考研保研资料分享16 小时前
2023历史学跨保山大马理论:两轮笔面试、课程论文与方向取舍
面试·职场和发展