读书笔记:4.1:高级编程语言的数据类型表示其占用内存空间的大小,以及存储数据的格式。内存本质上是一种名为内存芯片的装置。内存芯片分为RAM、ROM油等不同类型,但从外部来看,它们的基本原理是相同的。内存芯片上有很多引脚,这些引脚负责连接电源,以及输入输出地址信号、数据信号和控制信号,通过指定地址,就可以对数据进行读写。(在计算机领域,人们习惯按照1024而不是1000进位,因为1024可以用2的整数次幂(210)表示。通常,小写的“k”表示1000进位,大写的“K”表示1024进位。)
4.2:在C语言中,8字节(=64比特)的double型是最大的。
4.3:指针是一种变量,它不存储数据本身的值,而是存储数据所在的内存地址。使用指针可以读写任意地址的数据。在我们前面展示的假想内存芯片中,地址信号用10比特来表示而在大家一般所使用的PC上运行的程序大多是使用32比特(4字节)来表示内存地址的,指针变量的长度就是32位。
4.4:数组是将相同数据类型(长度)的多个数据连续排列在内存中的一个元素序列。其中每个数据就是数组的元素,元素通过顺序编号来进行区分,这个编号称为下标。通过下标可以读写相应的内存空间睡。将下标转换成实际内存地址的操作是由编译器自动完成的。char型数组以1字节为单位,short型数组以2字节为单位,long型数组以4字节为单位对内存进行读写。
使用数组可以提高编程效率。在循环团中使用数组可以用很短的代码按顺序读取或写入数组元素。
4.5:栈和队列都是无须指定地址和下标就可以对数组元素进行读写的结构。在需要临时保存计算中间结果或计算机外部设备的输入输出数据时经常会以这些方式来使用内存。
栈和队列的区别在于数据的出入顺序。在对内存进行读写时,栈采用的是LIFO(LastIn First Out,后进先出)方式,而队列采用的是FIFO(First In First Out,先进先出)方式。事先在内存中预留栈和队列所需要的空间,并确定数据的读写顺序就不需要指定地址和下标了。要在程序中实现栈和队列,需要先声明一个包含若干元素的数组用来存放数据,然后编写用于读写元素的函数。
4.6:使用链表可以高效地向数组中添加和删除数据(元素)。使用二叉查找树可以高效查找数组中存放的数据。链表的实现方式是对于数组中的每个元素,不仅保存它的值,还要额外保存其下一个元素的下标。也就是说,数据的值和下一个元素的下标合在一起形成了数组的一个元素。,数组的元素就像项链一样被串了起来,从而形成链表。