当前位置: 首页 > news >正文

《C++程序设计》阅读笔记【8-结构体】

🌈个人主页:godspeed_lucip
🔥 系列专栏:《C++程序设计》阅读笔记

本文对应的PDF源文件请关注微信公众号程序员刘同学,回复C++程序设计获取下载链接。


  • 结构体
    • 概述
      • 基本使用
      • 为结构体赋值
    • 结构体和指针
    • 结构体的嵌套
  • 2 过程化语句
    • 2.1 switch
      • 2.1.1 运行流程
  • 3 总结

结构体

概述

声明一个结构并不分配内存。只有定义了一个结构体变量时才会分配内存。

结构体中的成员默认都是public的。C++中的结构体可以包含成员函数,且可以和类一样设置权限(C中的结构体只可以有成员)

基本使用

为结构体赋值

用数组给另外一个数组进行赋值是行不通的。因为数组只是代表空间,无法对数组(空间地址)进行批量操作。

例如:

inta[3]={1,2,3};intb[3]={4,5,6};a=b;//error

但是结构体大小固定,是可以使用另外一个结构体进行赋值的。

两个不同结构名的变量是不允许相互赋值的,即使二者包含同样的成员

结构体和指针

与数组不同,结构体名不是指针。但是它是有地址的,使用取值操作符&就可以得到。这个地址就是结构的第一个成员的地址。

可以将结构变量的地址赋给结构指针,结构指针通过箭头操作符->(也是一种结构成员操作符)来访问结构成员。

结构体的嵌套

结构体中可以包含其他结构。但是结构成员不可以是自身的结构变量,但是可以用自身结构指针作为成员。

解释:定义结构体时,它自身还处于类型描述中,不能用尚无成型的结构来描述其成员。但是结构体指针的大小是确定的。

例如:

2 过程化语句

2.1 switch

2.1.1 运行流程

  1. 求值:首先,switch后的表达式被求值。这个表达式的结果会被用于决定执行哪个case分支。

  2. 匹配:switch语句中的每个case分支都包含一个常量表达式或字面值。程序会将switch后的表达式的值与每个case分支的常量进行比较,直到找到匹配的分支或到达default分支。如果找到匹配的case,程序将跳转到该分支执行相应的代码。

    switch(expression){caseconstant1:// Code for case constant1break;caseconstant2:// Code for case constant2break;// ...default:// Code for default case}
  3. 执行代码块:一旦找到匹配的case,程序将开始执行与该case相关联的代码块。如果没有匹配的case,且存在default分支,程序将执行default分支的代码块。

  4. 跳出switch一旦执行了匹配的casedefault分支的代码块,程序将跳出整个switch语句(前提是遇到break语句或者switch代码块中的代码都被执行完了),继续执行switch语句之后的代码。

switch语句中,使用break语句可以强制跳出switch语句,防止继续执行后续的case分支。如果没有break语句,程序会继续执行下一个case分支,直到遇到breakreturnthrow或者到达switch语句的末尾

需要注意的是,switch语句中的每个case常量必须是整型、字符型或枚举型。这是因为switch语句的实现通常基于跳转表,而这些类型是离散的,适合用于高效的跳转表实现。(float实际上是连续的,赋值float a=0.1; float b=0.1;但是ab是有可能不相等的)

TIP1:

为什么不可以用float表示switch的表达式:

相等的两个浮点数可能在实际表示上有微小的差异。主要原因:

  1. 精度限制:浮点数在计算机中以有限的二进制位数表示。在进行浮点数计算时,有些实数值无法精确表示,因此计算结果可能会略有误差。比如1.23就只能用无限的二进制数去表示
  2. 舍入误差:浮点数运算涉及舍入,因为计算机的位数是有限的。这意味着某些小数可能被截断或舍入,导致结果的微小差异。
  3. 数值不可数性:许多实数值,特别是无理数,无法被有限的浮点数表示。例如,π(圆周率)和e(自然对数的底数)等是无理数,它们只能以近似的方式表示。

TIP2:

default语句是可以不要的,当default不出现时,则当表达式的值与所有常量表达式都不相等时,就会越过switch语句

3 总结

C++,犹如编程的交响乐, 在代码的海洋中奏响和谐的旋律。

它是创造者的笔,雕刻着无尽可能,

是思想的翅膀,让梦想飞翔的天空。

无拘无束,灵活多变。

C++,是程序员心中的宝藏,永不凋零的花朵。

渴望挑战C++的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多C++的奇迹吧。我们推出了引领趋势的💻C++专栏:《C++程序设计》阅读笔记,旨在深度探索C++的实际应用和创新。🌐🔍

http://www.jsqmd.com/news/1334494/

相关文章:

  • TestDisk与PhotoRec:企业级数据恢复的终极开源解决方案
  • 2026 国开高起专|咸宁职业技术学院机电一体化技术专业招生简章 - 升学择校早知道
  • mysql使用--带搜索条件的查询
  • API中转站接入表格任务:批量摘要、分类和标签怎么做
  • WuWa-Mod终极指南:解锁《鸣潮》无限游戏乐趣的完整教程
  • 武汉专升本记过上岸率:真实数据下的机构选择指南 - 新闻快传
  • 江苏宏帝智能测评:深耕特种暖通的国家级高新技术企业实力解析 - 兔兔不是荼荼
  • c++类与对象(下)
  • 技术深度解析:CaImAn如何革新大规模钙成像数据分析
  • 深入解析Illustrator脚本自动化:基于JavaScript的图形处理算法实现
  • FGO-py终极指南:如何快速实现Fate/Grand Order全自动刷本
  • 大麦自动抢票终极指南:告别手慢烦恼,5分钟快速上手
  • B站下载神器BiliTools:跨平台B站资源下载完整解决方案
  • 贵阳花溪俊顺巧 专业汽车维修服务全解 - 百航
  • 紧急预警:2024Q3起平台将标记“AI生成品牌文案”——3招反向赋能,把标签变信任背书
  • Javaweb之SpringBootWeb案例之 登录功能的详细解析
  • Rightly领衔8款App合规检测工具对比
  • 大数据转大模型:为什么数据能力反而成了包袱?
  • 2026年潍坊实木衣柜定制工厂价全解析及计价避坑指南 - 新闻快传
  • Label Studio实战:如何用开源工具构建企业级AI数据标注平台
  • 手把手搭建 OpenClaw,让 AI 通过自然语言操控你的电脑(含安装包)
  • XSwitch架构深度解析:企业级Chrome请求转发与CORS管理最佳实践
  • 洛雪音乐音源配置完整教程:免费解锁全网无损音乐资源
  • 2026小鹏汽车金融方案全景盘点:**智选分期与信用卡分期8种模式详解、优劣势对比及选型避坑指南 - U渠道
  • 如何用GetQzonehistory一键备份你的QQ空间十年回忆
  • 【小工具】stream的各种使用方式
  • Java 入门基础篇02-JDK windows11安装配置环境
  • 一键生成PPT哪个AI工具最好用|2026主流AI‑PPT工具实测横评
  • 数据分析师全栈技能实战指南:从Excel到AB实验的完整学习路径
  • 终极指南:如何在Windows、Mac和Ubuntu上使用iFakeLocation实现iOS虚拟定位