《C语言参悟之旅》-读书笔记(八)

《c语言参悟之旅》简介 左飞老师的《c语言参悟之旅》推荐。本文件只包含一章,如需阅读,请购买正版图书 立即下载
                                                            

                                                               第九章   结构体和共用体

一、结构体

由一系列具有相同类型或不同类型的的数据构成的数据集合(但不能包含函数类型)

1.定义

  1)第一种形式

struct  结构体类型名
{
     数据类型名1   成员名1;
.........
     数据类型名2  成员名2;
};
struct  结构体类型名  变量名列表;

  2)第二种形式

struct  结构体类型名
{
     数据类型名1   成员名1;
.........
     数据类型名2  成员名2;
}变量名列表;
 

注意:

    结构体的成员也可以是一个结构体变量

   C语言允许对两个相同类型的结构体变量之间进行整体赋值,但不允许整体输出;

2.指向结构体的指针

struct  结构名  *  结构指针变量名;

3.访问成员

结构体变量名 . 成员名     或    (*结构体指针变量).成员名

4.结构体与函数

 1)结构体变量和结构体指针变量作为函数返回值

struct     struct_function(void);
struct  *  struct_function(void);

 第一个返回的是结构体对象

   当返回值为结构体变量时,是将返回的结构体初始化

 第二个返回的是结构体指针(速度比较快)
  当返回值为结构体指针变量时,初始化函数返回指针变量时是修改内存中的一个结构体变量的值,并将该结构体变量的初始地址返回

 2)结构体变量和结构体指针变量作为函数形式参数

struct      struct_funtion(struct   struct_pm,...);
struct   *  struct_funtion(struct * pstruct_pm,.....);

  A)形参为结构体变量

     当结构体变量作为形参时,在调用该函数时,首先复制整个结构体形成结构体副本,然后对副本进行修改,但并没有修改原来的结构体,再将副本作为返回值返回
  B)形参为结构体变量指针 

     当结构体指针作为形参时,在调用该函数时首先复制的是该结构体的地址,形成一个地址副本,然后使用这个地址副本对其指向的结构体变量进行修改,最后将地址副本作为返回值

二、共用体

    共用体用来描述类型不同的数据,与结构体不同的是:共用体对成员存储时采用覆盖技术,共享存储空间,成员被分配在同一段内存空间中。成员既可以具有相同的数据类型,也可以具有不同的数据类型

   1、定义

union  共用体名
{
  数据类型  成员名1;
  数据类型  成员名2;
.........
  数据类型  成员名3;
};

2、共用体与结构体的比较:

 1)相同的定义方式

 2)引用成员的方式也一样

 3)共用体变量所占的内存长度等于其成员变量中所占存储空间最大的那个,而结构体变量其所占的内存长度等于其成员变量所占内存之和(不考虑内存对齐)

struct  
{
   char i;
   float  f;
}sum;        //定义一个结构体变量sum
union
{
     char  i;
     float  f;
}max;         //定义一个共用体变量

3、共用体的初始化

 初始化共用体变量,只需初始化第一个成员

 错误的初始化方法:

union mark
{
     int   score    //表示分数
     char   degree[4];   //表示等级
} liming = {90,"优"}; //出错 

 正确的初始化方法

union mark
{
     int   score    //表示分数
     char   degree[4];   //表示等级
} liming = {90}; 

4、注意事项:

    1)共用体存放的是最后一次存放成员的值

max.i = 100;
max.f = 123.123;

执行完上面两条语句后,只有max.f有效,max.i 已经没有意义了
 

 2)共用体变量的地址和各个成员的地址都是同一个地址值

 3)不能把共用体变量用作函数参数和函数返回值,但可以使用指向共用体变量的指针

三、枚举

     一种将变量可能取值明确列举出来,变量的取值只限于列举出来的常量。

enum   枚举名{枚举值表};
enum   枚举名   变量名列表;

 eunm meta_color{ red, green, blue };

enum meta_color{red, green = 20, blue};


 四、自定义类型 typedef

 并不是用户自己定义的一种新的数据类型,而是用户根据自己的具体需要给某种数据类型重新命名

1.定义

//typedef  类型名  标识符
struct  pts
{
    int   x;
    int   y;
};
typedef  struct   pts     Point;

typedef 实质上是对现有数据类型的另一种说明,并没有增加新的数据类型
2、typedef和define的不同:

1)typedef只针对数据类型,不针对值,define既可以针对数据类型,也可以针对值。

2)typedef是对一种已有数据类型的彻底“封装”,在声明之后不能再往里面添加任何代码,而define只是简单的文本替代

3、typedef的主要作用;

 1)使用typedef有利于程序的移植和跨平台开发

typedef  unsigned   int    size_t;

在所有的计算机平台中,没有哪一种类型是最佳的选择,因此给出了一种新的数据类型size_t,让具体的实现者来这个类型名定义为特定的类型。size_t定义在头文件time.h中

 2)使用typedef可以简化代码

 

 

C语言参悟之旅 本书作者将丰富的开发经验凝聚在方寸之间,以轻松易懂、深入潜出的笔调将C语言的世界描绘得有声有色。 立即下载

相关推荐

C语言参悟之旅.pdf

C语言参悟之旅.pdf C语言学习相关资料,收藏一下

《C语言参悟之旅》-读书笔记(六)

第7章指针 C语言编写的程序至今仍能和汇编语言程序相媲美,其中一个重要原因就是拥有一种数据类型——指针(内存操作) 1.指针和地址      数据的访问方式——直接访问和间接访问 间接访问方式     通过变量来访问( 计算机用一个别称(变量)来标识存储单元,计算机在寻找内存的数据时就要先把这个别称翻译成地址才行  ) 直接访问方式    通过地址来访问

瞎几波写 981

C语言参悟之旅pdf

C语言参悟之旅

《C语言参悟之旅》新鲜试读(完结篇)

lizhaoheng1982的专栏 4909

告别环境依赖!用PyInstaller把PaddleOCR项目打包成独立EXE(附完整spec文件配置)

本文详细介绍了如何使用PyInstaller将PaddleOCR项目打包成独立EXE文件,彻底解决Python环境依赖问题。通过完整的spec文件配置和实战技巧,开发者可以轻松创建开箱即用的OCR工具,特别适合需要交付给非技术用户的场景。文章涵盖环境配置、模型打包、性能优化等关键环节,并提供了解决常见问题的方案。

weixin_33712987的博客 575

用Python玩转Milvus:从安装SDK到完成第一个向量搜索Demo

本文为Python开发者提供了一份详细的Milvus向量数据库实战指南。文章重点讲解了如何规避版本兼容性陷阱,正确部署Milvus服务端并安装匹配的Python SDK。通过一个电影推荐系统的完整案例,演示了从数据建模、集合创建、向量插入、索引构建到执行混合搜索的全流程,帮助开发者快速上手并完成第一个向量搜索Demo。

weixin_29239279的博客 192

c语言参悟之旅,《C语言参悟之旅》-读书笔记(一)

第一章 程序设计与C语言1.什么是计算机程序?计算机程序是指能使计算机做出信息处理行为并产生一定结果的指令集和(就像做菜的菜谱)2.高级语言的执行方式?( 1 )采用编译方式编译----->编译----->链接----->生产可执行文件(2)解释方式利用针对某种高级语言的解释软件,解释所遇到的高级语言中的每个操作并完成这些操作所要执行的动作高级程序员程序----------...

weixin_42521276的博客 355

UE4 GamePlay框架深度解析:从蓝图到C++构建多人游戏核心

在游戏开发与实时交互应用领域,一套清晰、可扩展的底层框架是项目成功的关键。GamePlay框架作为虚幻引擎(UE4/UE5)的核心架构,定义了游戏世界中对象交互、状态管理与网络同步的基本原理。它通过职责分离的设计模式,将游戏规则(GameMode)、全局状态(GameState)、玩家状态(PlayerState)、可操控实体(Pawn/Character)及其控制器(Controller)等核心类有机组织起来,确保了逻辑的清晰性与多人游戏数据的一致性。其技术价值在于为开发者提供了一套经过验证的最佳实践,大

weixin_33924770的博客 623

《C语言参悟之旅》 -读书笔记(一)

最近在看《C语言参考之旅》,感觉这本书不错,作者有用心去写,也写出了一些实际开发过程中雪要注意的细节,和高校教师所编的书还是有一定区别,初看好像很简单,但仔细看还是有一定的深度,适合掌握了一些基本语法的 C语言学习者学习,本文记下了阅读过程中自己认为比较重要而在学校教材里没有讲透彻的地方摘录下来

瞎几波写 1104

STM32 HAL库定时器中断里读编码器速度准吗?聊聊MG310电机的测速与防溢出处理

本文探讨了STM32 HAL库在定时器中断中读取编码器速度的精度问题,特别针对MG310电机的测速与防溢出处理提供了解决方案。通过对比定时中断法和编码器模式的性能,揭示了硬件编码器接口在降低误差和CPU占用率方面的优势,并详细介绍了CubeMX配置技巧和防溢出处理的工程实践。

weixin_28720767的博客 401

VS Code + Codex 在 WSL 中使用的正确姿势

Codex 登录只能在本地完成。文件仍可通过 UNC 路径访问 WSL → 本地 Codex 就能照常工作。避免在 WSL 内重复安装/登录 Codex 扩展。

yangguangwuyue的博客 9852

《C语言参悟之旅》-读书笔记(七)

第八章 预处理 cpp源文件——(预编译)》预处理文件——(编译)》目标文件——(连接)》可执行文件 预处理:源文件在进行编译时第一遍扫描之前做的工作(词法分析和语法分析) 程序员与预处理器进行交互的工具是一种被称作预处理器指示的命令(一些以“#”号开头的单行命令) 编译的源文件test.cpp #include #define PI 3.1415926 int main( ) {

linuxlinuxlinuxlinux的专栏 1855

Linux CentOS7文件系统(/dev/var)的容量扩充

原因是之前安装docker后,再想安装Nessus,系统说home、var文件系统的内存都不够。

JHoanna的博客 3226

《C语言参悟之旅》-读书笔记(四)

第五章 函数 Ps:     函数的语法本身并不复杂,真正需要编程者去理解和体会的往往是如何用函数来拆解问题,使用函数的水平直接反映在编程者能够组织多大规模的程序 1.C语言中的main( )函数           main( )函数可以调用任何C语言函数;           但任何C语言函数都不能调用main( )函数,main( )函数通常在其所属的程序执行时被操作系统调用。 2

linuxlinuxlinuxlinux的专栏 816

FreeRTOS深入教程(任务创建的深入和任务调度机制分析)

本篇文章将带大家深入学习任务的创建和分析任务调度的机制。本篇文章深入的讲解了任务创建的内部实现和任务调度的源代码分析和实现,学习这篇文章有助于更深入的学习FreeRTOS的源码。

m0_49476241的博客 6393

Android 11多窗口+分屏+APP窗口嵌套TaskView实现原理一

然而随着版本的迭代升级,google对分屏的定制差异化也越来越大,Androd 11的分屏用的是split-screen-primary和split-screen-secondary的方式,在systemui中去实现的,其定制化的灵活度不是很高,很多业务都是放到sustemui或者fw去实现,但是随着版本的升高,后面出现了TaskView来替代了老版本的分屏方式,但是Task的核心原理其实和之前的方式是一样的,TaskView来实现分屏。

qq_18420641的博客 2615

《C语言参悟之旅》-读书笔记(九)

第十章  文件 文件就是一组相关元素或数据的有序集合,每个集合都有一个符号化的指代(文件名) 文件通常都被存在外部存储器上,它只在需要使用时被调入内存 一.相关概念: 1.主要分类   1).  普通文件:驻留在磁盘或其他外部介质上的一些有序数据集,   2).设备文件(逻辑上的文件): 和主机相连的各种外部设备:如显示器、打印机、键盘 2.流的概念  流就是表示文本输入(或输出)

linuxlinuxlinuxlinux的专栏 2226

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

《C语言参悟之旅》-读书笔记(二)

第三章  运算符、表达式和语句 1.在表达式中使用(   )是一种很好的编程方式能大大提高程序的可读性如:            标准C中对很多运算符的求值顺序都没有进行明确规定,实现顺序与具体实现有关( 编译环境)                                                                        -a +b / 2 - c * 5

linuxlinuxlinuxlinux的专栏 895

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

《C语言参悟之旅》-读书笔记(三)

第四章   流程控制 1.流程图(当初学的时候觉得很麻烦,现在觉得对整理编程思路帮助还是很大) 2.顺序结构   3.分支结构  1)形式 (  else 总是与其前面最近的 if 配对 )        A . if(表达式)               语句;        B. if(表达式)             语句1;           else

linuxlinuxlinuxlinux的专栏 748

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

《C语言参悟之旅》-读书笔记(一)

第一章    程序设计与C语言            1.什么是计算机程序?               计算机程序是指能使计算机做出信息处理行为并产生一定结果的指令集和(就像做菜的菜谱)         2.高级语言的执行方式?              ( 1 )采用编译方式                                  编译----->编译----->链接--

Ac Dream 864
上一篇: 《C语言参悟之旅》-读书笔记(七)
下一篇: 《C语言参悟之旅》-读书笔记(九)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值