C语言基础4

sizeof和strlen的区别

①sizeof是运算符而strlen是函数

②sizeof可以用类型做参数,strlen只能用char*做参数

③数组做sizeof参数不退化,而传递给strlen则退化成指针

④strlen结果是运行时候才能计算出来,而且计算出来的是字符串的长度不是内村的大小

⑤当使用的是结构体或者变量时,sizeof返回的是实际的大小,静态空间数组则返回数组的尺寸

⑥sizeof不能返回动态分配的数组或者外部数组的尺寸

volatile关键字的作用

通过volatile关键字告知编译器不要对变量进行优化,以避免出现意外的行为。更确切的是告诉优化器在用到这个变量时必须每次都小心地重新读取这个变量在内存中的值,而不是使用保存在寄存器里的备份(虽然读写寄存器比读写内存快)。

它主要用于处理与多线程、中断处理和硬件寄存器等相关的情况。

1、防止编译器优化:编译器在优化代码时会尝试将变量的访问操作优化为更高效的方式,例如将变量的值缓存在寄存器中。然而,对于某些特殊的变量,如多线程环境下的共享变量、中断处理中的标志位、硬件寄存器等,这种优化可能会导致意外的行为。使用 volatile 关键字可以告诉编译器不要对该变量进行优化,确保每次访问都从内存中读取或写入。

2、处理多线程共享变量:在多线程编程中,当一个变量被多个线程共享并且可能被一个线程修改时,需要使用 volatile 关键字来确保线程之间的可见性。这样可以防止编译器对共享变量的优化,确保每个线程都能正确地读取到最新的值。

3、处理中断和硬件寄存器:在中断处理程序中,某些变量可能由硬件直接修改,而不是通过常规的变量赋值操作。在这种情况下,使用 volatile 关键字可以确保编译器不会对这些变量的访问进行优化,以避免出现不一致的行为。

不能做switch的参数类型

switch语句的参数只能是整数类型,包括char、int以及enum类型。

如果尝试使用其他类型,如float、double或指针类型,编译器会报错。

断言宏的作用

断言宏通常用于在程序中插入一些检查语句,以确保程序的正确性和健壮性。其主要作用包括:

  1. 调试和测试:断言宏可以帮助开发人员在开发和测试阶段检查程序中的假设是否成立,及时发现潜在的问题和错误。

  2. 程序健壮性:通过断言宏可以在程序中加入一些前置条件和后置条件的检查,确保程序在运行时满足一定的条件,防止出现不可预料的错误。

  3. 错误定位:当断言条件不满足时,断言宏会触发断言失败,输出错误信息并中断程序执行,帮助开发人员快速定位问题所在。

  4. 提高代码质量:合理使用断言宏可以帮助开发人员编写更健壮、更可靠的代码,提高代码质量和可维护性。

一般来说,断言宏在开发和测试阶段经常被使用,一旦程序发布到生产环境中,通常会关闭断言功能,以提高程序的性能和稳定性。

在C/C++中,常用的断言宏包括 assert 宏,用于检查条件是否满足,如果条件不满足,则触发断言失败。

浮点类型的内存模型

以单精度浮点数(float)为例:

1、先将float值的整数位转换为二进制

2、再将其小数位转为二进制

3、左移小数点,保证整数位有且只有1个1(整数位不能为0)

4、按照内存模型进行存储

(1) 最高一位为符号位:正数为0, 负数为1

(2) 符号位后面的8位为指数位

规则:127+指数值,转换为二进制

(3) 剩余23位为尾数位

规则:尾数如果不足23位,则右侧补0(二进制小数位后面补零)

尾数如果超过23位,则只保留23位,其余舍去

5、将内存模型中的二进制转换为十六进制(调试期间,查看内存时的数据显示状态为十六位)

6、然后将其转换为小端存储模式(调试期间,通常系统都是X86体系,小端存储模式)

相关推荐
gentle_ice18 分钟前
leetcode——二叉树的中序遍历(java)
java·数据结构·算法·leetcode
monstercl34 分钟前
C语言连接Mysql
c语言·mysql
苹果酱056737 分钟前
mysql.sock.lock 导致mysql重启失败
java·spring boot·毕业设计·layui·课程设计
吃一口大米饭44 分钟前
合并两个有序链表(leetcode刷题)
java·数据结构·算法·leetcode·链表
简 洁 冬冬1 小时前
Java中的Servlet
java·开发语言·servlet
fly spider1 小时前
多线程-线程池的使用
java·面试·线程池·多线程·juc
组合缺一1 小时前
Solon Cloud Gateway 开发:导引
java·gateway·reactor·solon·响应式
挽清和2 小时前
总结8..
c语言
matlabgoodboy2 小时前
留学生scratch计算机haskell函数ocaml编程ruby语言prolog作业VB
开发语言·后端·ruby
R三哥哥啊3 小时前
【Qt】06-对话框
开发语言·qt·microsoft·qt5