前言

目前学习的内容,要和函数的实现,操作系统以及Linux函数库做交叉,对于任何一种编程语言来说都是一种进阶。学习的一种目的也在于开阔眼界,看到一种方法的多种实现。

OS—-缓冲分类


image.png


关于缓冲的C标准


非交互式设备使用全缓冲,标准错误不能使用全缓冲

字符变量的赋值

但我们给变量赋值的时候,一定要区分字符和字符串类型,仔细审查变量和数据类型是否完全一致。

如果将字符串赋值给字符数据类型,那么打印的值会随机抽取内存地址的第一位,因此打印的结果会随着运行时内存分配的不同而不同。

字符串赋值乱用.png


混合运算

在混合运算中,不同数据类型之间以赋值的方式传递值,可能会发生数据丢失,为避免此情况,可以强制转换数据类型;但数据传入的时候加判断,数据合法则强制转换数据类型;

注意:数据丢失的警告,需要使用打印语句才能够调出,赋值的过程并不需要直接使用变量;

应用:前端传过来的数据,后端仍然需要做数据检查,否则黑客可以利用抓包工具获取数据存取方式进而发起攻击;

编译原理:在编译的时候不会将值拿过去,而是对变量做数据类型检查;
image.png


image.png


浮点运算的默认大小

第一个打印的值只有7位精度,单精度浮点数f只有4字节的存储空间,能够表示的精度是6~7位,所以只保证1~7位是正确的,后面的都是近似值;

注意第五行和第七行,先赋值后计算和先计算后赋值不一样。前者会发生数据丢失,后者不会;

第二个打印的值是正确的浮点型常量,它是按8字节即double型进行运算的,同时%f会访问寄存器8字节的空间进行浮点运算,因此可以正常输出。

补充:大多数运算给四个字节存储或者表示即可,位数的增加会直接增加硬件成本;Python没有编译步骤,执行时动态扩容;
image.png


image.png


scanf语句

实现原理:对系统调用的封装,这个系统调用包含三个部分,标准输入,标准输出,标准错误。使用系统调用缓冲区读取数据

语句特性:它不支持可变参数类型