news 2026/4/17 16:34:03

C :结构体详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C :结构体详解

C语言结构体(struct)超级详解
从最基础到最容易被面试官问到的进阶用法,一次性讲透!

1. 结构体最基础的概念

struct结构体标签名{类型1成员名1;类型2成员名2;...类型N 成员名N;};

最常用的三种写法(请牢牢记住这三种写法)

// 写法1(最常用、最推荐)structStudent{charname[64];intage;floatscore;chargender;};// 写法2(定义类型的同时直接创建变量)structStudent{charname[64];intage;floatscore;}stu1,stu2,stu3;// 同时创建了3个变量// 写法3(匿名结构体 —— 只能用一次)struct{charname[64];intage;}person1,person2;// 这种方式最不推荐

2. 结构体变量的几种常见定义方式对比(重要!)

写法是否有类型名可不可以多次创建变量推荐指数备注
struct Student s1;有(Student)可以★★★★★最推荐
struct Student s1 = {..};可以★★★★初始化写法
struct {..} s1;没有只能用一次★☆几乎不用
typedef struct {..} Stu;有(Stu)可以★★★★★非常常用!后面会讲
typedef struct Student Stu;有(Stu是别名)可以★★★★也很常见

3. 结构体内存对齐(★★★面试最爱考)

最核心的两句话

  1. 结构体内存对齐的根本目的提高CPU读取数据的效率(以牺牲一点内存为代价)
  2. 对齐原则(默认规则,绝大多数编译器都遵守):
每个成员相对于结构体首地址的偏移量 必须 是 自身大小 或者 编译器默认对齐数 的整数倍 整个结构体的大小 必须 是 所有成员中最大对齐数的整数倍

常用的对齐数(32/64位系统通常都是这样)

类型自身大小默认对齐数(常见)
char11
short22
int,float44
double88
指针4/84/8
结构体/共用体最大成员的对齐数

经典例题必做(请全部手算一遍)

structA{chara;// 1intb;// 4doublec;// 8shortd;// 2};structB{doublec;// 8intb;// 4chara;// 1shortd;// 2};structC{chara;//1structAb;// 按照 struct A 整体来算};

答案(请自己先算,再对):

  • sizeof(struct A) =24
  • sizeof(struct B) =16(最优写法)
  • sizeof(struct C) =48(因为里面嵌套了一个24字节的struct A)

4. 结构体初始化最常见的几种写法

structStudent{charname[64];intage;floatscore;};// 方式1 —— 推荐(C99之后支持)structStudents1={.name="张三",.age=20,.score=88.5f};// 方式2 —— 顺序初始化(最原始)structStudents2={"李四",21,92.5f};// 方式3 —— 部分初始化(其余为0)structStudents3={"王五"};// 方式4 —— 清零(最常用初始化方式)structStudents4={0};

5. 结构体指针最常用写法(非常非常重要!)

structStudent{charname[64];intage;}stu;// 方式1(最常用、最推荐)structStudent*p=&stu;// 两种等价写法(一定要非常熟练)(*p).age=18;// 方式Ap->age=18;// 方式B ← 99%的情况下都用这个!

6. 位域(Bit Field) —— 省内存神器(面试中高级常考)

structFlags{unsignedintflag1:1;// 只占1bitunsignedintflag2:1;unsignedintflag3:2;// 占2bitunsignedintflag4:4;// 总共占用 1+1+2+4 = 8 bit = 1 byte};structFlagsf={0};f.flag1=1;f.flag3=3;

位域限制(一定要记住):

  • 不能取地址(&操作)
  • 不能是double、float、long long
  • 不能跨越存储单元(不同编译器可能不同)

7. 结构体与typedef的黄金搭配(最最常用写法)

// 写法1(最推荐!几乎所有现代C代码都这么写)typedefstruct{charname[64];intage;floatscore;}Student;// 使用方式Student s1;// 直接用类型名,不用再写structStudent*p=&s1;p->age=18;// 写法2(也很常见)typedefstructStudentStudent;// 写法3(最原始,但现在很少用了)structStudent{...}typedefStudent;

8. 结构体经典面试/笔试高频题型汇总

  1. 求sizeof(结构体) (内存对齐最重要)
  2. 成员偏移量怎么求?(offsetof宏)
  3. 结构体里面嵌套结构体怎么对齐?
  4. 位域怎么用?位域的内存布局是怎样的?
  5. 结构体作为函数参数是传值还是传指针?(99.9%用指针)
  6. 结构体数组、结构体指针数组、指针数组的区别?
  7. 结构体和共用体(union)在内存占用上的本质区别?

最后送你一句最重要的话:

“只要涉及到结构体,就一定要想到内存对齐”

只要写到结构体指针,就一定要用 -> 而不是 .

只要定义结构体类型,强烈建议搭配 typedef 使用

需要我帮你把哪几种写法、哪几道经典题再展开讲得更细一点?
或者想看某一类题目(比如内存对齐)的10道经典例题?直接告诉我~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 18:54:16

leetcode 900. RLE Iterator RLE 迭代器-耗时100

Problem: 900. RLE Iterator RLE 迭代器 耗时100%&#xff0c;每次移除已经用掉的数字部分的&#xff0c;若是没用完则修改到剩下的数量&#xff0c;若是全部用完清空并返回-1 Code class RLEIterator { public:vector<int> enc;RLEIterator(vector<int>& enc…

作者头像 李华
网站建设 2026/4/15 14:44:51

YOLO26涨点改进 | 全网独家创新、特征融合改进篇 | CVPR 2024 顶会| 引入MFM调制融合模块, LEGM局部到全局模块,二者共同合作,多种创新改进,助力YOLO26高效涨点

一、本文介绍 本文给大家介绍MFM调制融合模块和LEGM局部到全局模块改进YOLO26模型!MFM和LEGM这种相互增强的学习策略,使得所提出的方法在计算机视觉各种任务性能上超越了现有先进方法,助力YOLO26 高效涨点!具体怎么使用请看全文。 🔥欢迎订阅我的专栏、带你学习使用最新…

作者头像 李华
网站建设 2026/4/8 11:10:44

2026年毕业论文自救指南:10款降AI率工具深度实测(附价格与避坑表)

Students help students.我今年写论文时候AI率用了三周才降下去&#xff0c;为了帮助大家解决论文AIGC率居高不下的难题&#xff0c;我根据最新的实测数据&#xff0c;整理了市面上10款主流的降AI工具。这不仅是一份工具清单&#xff0c;更是一份帮你省钱、省力的实操攻略。&am…

作者头像 李华
网站建设 2026/4/1 3:48:00

LVM分区创建、数据迁移与重新挂载操作文档

LVM分区创建、数据迁移与重新挂载操作文档 文档说明 操作场景&#xff1a;将原有数据目录&#xff08;/opt/data&#xff09;迁移至新建LVM逻辑卷&#xff0c;提升磁盘存储的灵活性&#xff08;扩容、缩容等&#xff09;&#xff0c;可在虚拟机上先操作操作对象&#xff1a;L…

作者头像 李华
网站建设 2026/4/16 22:55:37

春节归途:2026年天象版图与平安锦囊

一、2026年春节全国天气趋势总览2026年春节&#xff08;公历2月17日&#xff09;&#xff0c;全国天气将在冷暖空气的复杂博弈中呈现“南北差异显著&#xff0c;局地波动剧烈”的总体格局。北方大部以干冷为主&#xff0c;但受一股中等强度冷空气影响&#xff0c;节前返乡高峰期…

作者头像 李华
网站建设 2026/4/15 23:50:03

摆脱论文困扰!一键生成论文工具 千笔·专业论文写作工具 VS Checkjie 专为继续教育设计

随着人工智能技术的迅猛迭代与普及&#xff0c;AI辅助写作工具已逐步渗透到高校学术写作场景中&#xff0c;成为专科生、本科生、研究生完成毕业论文不可或缺的辅助手段。越来越多面临毕业论文压力的学生&#xff0c;开始依赖各类AI工具简化写作流程、提升创作效率。但与此同时…

作者头像 李华