《c程序设计语言》读书笔记(二)5~8

本文探讨了C/C++编程中的关键概念,包括编译器与预处理器的区别、指针与数组的关系、结构体与联合体的应用、输入输出操作以及UNIX系统接口的基本功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自己的思考:

1、编译器、预处理器的区别:

预处理器会处理相关的预处理指令,一般是以"#"开头的指令。如:#include "xx.h" #define等。预处理器处理程序的源代码,在编译器之前运行。关于处理器的介绍可以参照详解C/C++预处理器
编译器把对应的*.cpp翻译成*.s文件(汇编语言)。

汇编器则处理*.s生成对应的*.o文件(obj目标文件)

最后链接器把所有的*.o文件链接成一个可执行文件(?.exe)

读书笔记:

五、指针与数组

1、地址运算符&只能用于内存中的对象,即变量与数组元素。它不能作用于表达式、常量或register类型的变量。

2、指针和数组名之间有一个不同之处。指针是一个变量,因此在c中,语句pa=a和pa++都是合法的(pa是一个指针)。但是数组名不是变量,因此类似于a=pa或者a++的形式是非法的。

3、如果将二维数组作为参数传递给函数,那么在函数的参数声明中必须指明数组的列数,数组的行数没有太大关系。

4、在调用主函数main时,可以带有两个参数。argc和argv.argv是一个指向字符串数组的指针,其中每个字符串对应一个参数。argv是一个执行指针数组的指针。

六、结构

1、如果结构声明的后面不带变量表,则不需要为它分配存储空间,它仅仅描述了一个结构的模板或轮廓。

2、结构的合法操作只有几种:作为一个整体复制和赋值,通过&运算符取地址,访问其成员。

3、low和high的初值分别指向表头元素的指针和表尾元素的指针。如果要计算中间元素的位置,两个指针之间的加法是非法的(mid=(low+high)/2),但是指针的减法运算却是合法的。(mid = low +(high - low) /2 )

4、由于typedef是由编译器解释的,因此它的文本替换功能要超过预处理器的能力。

5、联合:

(1)联合提供了一种方式,以在单块存储区中管理不同类型的数据,而不需要在程序中嵌入任何同机器有关的信息:一个变量可以合法地保存多种数据类型中任何一种类型的对象。类似于面向对象中的多态。

(2)联合就是一个结构,他的所有成员相对于基地址的偏移量都为0,此结构空间要大到足够容纳最”宽“的成员,并且,其对齐方式要适合联合中所有类型的成员。

(3)联合只能用其第一个成员类型的值进行初始化。

七、输入与输出

1、scanf的参数除了第一个是format的格式说明,其他参数都必须是指针,用于指定经格式转换后相应输入保存的位置。

2、大多数操作系统都限制了一个程序可以同时打开的文件数,所以当文件不再需要时就应该释放。

八、UNIX系统接口

1、系统负责维护已打开文件的所有信息,用户程序只能通过文件描述符引用文件。

2、fopen函数的主要功能是打开文件,定位到合适的位置,设置标志位以指示相应的状态。它不分配任何缓冲区空间,缓冲区的分配实在第一次读文件时有函数_fillbuf完成的。

3、malloc并不是从一个在编译时就确定的固定大小的数组中分配存储空间,而是在需要时向操作系统申请空间。因为程序中的某些地方可能不通过malloc调用申请空间,所以malloc管理的空间不一定是连续的。

4、在malloc函数中,请求的长度将被舍入,以保证它是头部大小的整数倍。实际分配的块将多包含一个单元,用于头部本身。实际分配的块的大小将被记录在头部的size字段中。malloc函数返回的指针将指向空闲空间,而不是块的头部。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值