1.过程
过程是软件中一种很重要的抽象。它提供了一种封装代码的方式,用一组指定的参数和一个可选的返回值实现了某种功能。然后,可以在程序中的不同地方调用这个函数。
不同编程语言中,过程的形式多样:函数、方法、子例程、处理函数等。
假设过程P调用过程Q,Q执行后返回到P,这些动作包括下面一个或多个机制:
-->传递控制:在进入过程Q的时候,程序计数器必须被设置为Q的代码的起始地址,然后在返回时,要把程序计数器设置为P中调用Q后面那条指令的地址。
-->传递数据:P必须能够向Q提供一个或多个参数,Q必须能够向P返回一个值。
-->分配和释放内存:在开始时,Q可能需要为局部变量分配空间,而在返回前,又必须释放这些存储空间。
2.指针运算
C语言允许对指针进行运算,而计算出来的值会根据该指针引用的数据类型的大小进行伸缩。也就是说,如果P是一个指向类型为T的数据的指针,P的值为x,那么表达式P+i的值为x+L*i,这里的L是数据类型T的大小。
3.异制的数据结构
C语言提供了两种将不同类型的对象组合到一起创建数据类型的机制:结构(structure,将多个对象集合到一个单位中)、联合(union,允许用几种不同的类型来引用一个对象)
-->结构:C语言的struct声明创建一个数据类型,将可能不同类型的对象聚合到一个对象中。用名字来引用结构的各个组成部分。类似数组的实现,结构的所有组成部分都存放在内存中一段连续的区域内,而指向结构的指针就是结构第一个字节的地址。编译器维护关于每个结构类型的信息,指示每个字段的字节偏移。它以这些偏移作为内存引用指令中的位移,从而产生对结构元素的引用。
-->联合:联合提供了一种方式,能够规避C语言的类型系统,允许以多种类型来引用一个对象。联合声明的语法与结构的语法一样,只不过语义相差比较大。它们是用不同的字段来引用相同的内存块。
4.理解指针
指针是C语言的一个核心特色。它们以一种统一的方式,对不同数据结构中的元素产生引用。
-->每个指针都对应一个类型:这个类型表明该指针指向的是哪一类对象。
-->每个指针都有一个值:这个值是每个指定类型的对象的地址。特殊的NULL(0)值表示该指针没有指向任何地方。
-->指针用&运算符创建。
-->数组与指针紧密联系。
-->将指针从一种类型强制转换成另一种类型,只改变它的类型,而不改变它的值。
-->指针也可以指向函数。
第三章小结