《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 运行流程
求值:首先,
switch后的表达式被求值。这个表达式的结果会被用于决定执行哪个case分支。匹配:
switch语句中的每个case分支都包含一个常量表达式或字面值。程序会将switch后的表达式的值与每个case分支的常量进行比较,直到找到匹配的分支或到达default分支。如果找到匹配的case,程序将跳转到该分支执行相应的代码。switch(expression){caseconstant1:// Code for case constant1break;caseconstant2:// Code for case constant2break;// ...default:// Code for default case}执行代码块:一旦找到匹配的
case,程序将开始执行与该case相关联的代码块。如果没有匹配的case,且存在default分支,程序将执行default分支的代码块。跳出
switch:一旦执行了匹配的case或default分支的代码块,程序将跳出整个switch语句(前提是遇到break语句或者switch代码块中的代码都被执行完了),继续执行switch语句之后的代码。
在switch语句中,使用break语句可以强制跳出switch语句,防止继续执行后续的case分支。如果没有break语句,程序会继续执行下一个case分支,直到遇到break、return、throw或者到达switch语句的末尾。
需要注意的是,switch语句中的每个case常量必须是整型、字符型或枚举型。这是因为switch语句的实现通常基于跳转表,而这些类型是离散的,适合用于高效的跳转表实现。(float实际上是连续的,赋值float a=0.1; float b=0.1;但是a和b是有可能不相等的)
TIP1:
为什么不可以用
float表示switch的表达式:相等的两个浮点数可能在实际表示上有微小的差异。主要原因:
- 精度限制:浮点数在计算机中以有限的二进制位数表示。在进行浮点数计算时,有些实数值无法精确表示,因此计算结果可能会略有误差。比如
1.23就只能用无限的二进制数去表示- 舍入误差:浮点数运算涉及舍入,因为计算机的位数是有限的。这意味着某些小数可能被截断或舍入,导致结果的微小差异。
- 数值不可数性:许多实数值,特别是无理数,无法被有限的浮点数表示。例如,π(圆周率)和e(自然对数的底数)等是无理数,它们只能以近似的方式表示。
TIP2:
default语句是可以不要的,当default不出现时,则当表达式的值与所有常量表达式都不相等时,就会越过switch语句
3 总结
C++,犹如编程的交响乐, 在代码的海洋中奏响和谐的旋律。
它是创造者的笔,雕刻着无尽可能,
是思想的翅膀,让梦想飞翔的天空。
无拘无束,灵活多变。
C++,是程序员心中的宝藏,永不凋零的花朵。
渴望挑战C++的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多C++的奇迹吧。我们推出了引领趋势的💻C++专栏:《C++程序设计》阅读笔记,旨在深度探索C++的实际应用和创新。🌐🔍