《C语言入门经典(第四版)8-程序的结构.ppt》由会员分享,可在线阅读,更多相关《C语言入门经典(第四版)8-程序的结构.ppt(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C入门经典(第入门经典(第4版)版)第第08章章 程序的结构程序的结构 如第如第1 1章所述,将程序分成适度的自包含单元是开发任一程序的基本方式。章所述,将程序分成适度的自包含单元是开发任一程序的基本方式。当工作很多时,最明智的做法就是把它分成许多便于管理的部分,使每一部分当工作很多时,最明智的做法就是把它分成许多便于管理的部分,使每一部分能很轻松地完成,并确保正确完成整个工作。如果仔细设计各个代码块,就可能很轻松地完成,并确保正确完成整个工作。如果仔细设计各个代码块,就可以在其他程序中重用其中的一些代码块。以在其他程序中重用其中的一些代码块。C入门经典(第入门经典(第4版)版)8.1 程序的
2、结构程序的结构 如概述所言,如概述所言,C C程序是由许多函数组成的,其中最重要的就是函数程序是由许多函数组成的,其中最重要的就是函数main()main(),它是执行的起点。本书介绍库函数,它是执行的起点。本书介绍库函数printfprintf()()或或scanfscanf()()时,说明了一个函数可以时,说明了一个函数可以调用另一个函数,完成特定的工作,然后调用函数继续执行。不考虑存储在全调用另一个函数,完成特定的工作,然后调用函数继续执行。不考虑存储在全局变量中的数据的负面影响,程序中的每个函数都是一个执行特定操作的自包局变量中的数据的负面影响,程序中的每个函数都是一个执行特定操作的自
3、包含单元含单元。uu 变量的作用域和生存期变量的作用域和生存期 uu 变量的作用域和函数变量的作用域和函数C入门经典(第入门经典(第4版)版)8.1.1 变量的作用域和生存期 在前面所有的例子中,都是在定义在前面所有的例子中,都是在定义main()main()函数体的起始处声明程序的变量。函数体的起始处声明程序的变量。事实上,可以在任何代码块的起始处定义变量。这有什么不同吗?这是绝对不事实上,可以在任何代码块的起始处定义变量。这有什么不同吗?这是绝对不同的。变量只存在于定义它们的块中。它们在声明时创建,在遇到下一个闭括同的。变量只存在于定义它们的块中。它们在声明时创建,在遇到下一个闭括号时就不
4、存在了号时就不存在了。C入门经典(第入门经典(第4版)版)8.1.2 变量的作用域和函数 在讨论创建函数的细节之前,最后要讨论的是,每个函数体都是一个块在讨论创建函数的细节之前,最后要讨论的是,每个函数体都是一个块(当然,它可能含有其他块当然,它可能含有其他块)。因此,在一个函数内声明的自动变量是这个函数。因此,在一个函数内声明的自动变量是这个函数的本地变量,在其他地方不存在。所以在一个函数内部声明的变量完全独立于的本地变量,在其他地方不存在。所以在一个函数内部声明的变量完全独立于在其他函数内声明的变量。可以在不同的函数内使用相同的变量名称,它们是在其他函数内声明的变量。可以在不同的函数内使用
5、相同的变量名称,它们是完全独立的。完全独立的。C入门经典(第入门经典(第4版)版)8.2 变量的作用域和函数 本书的程序广泛使用了内置函数,例如本书的程序广泛使用了内置函数,例如printfprintf()()或或strcpystrcpy()()。还介绍了在按。还介绍了在按名称引用内置函数时如何执行它们,如何通过函数名称后括号内的参数,给函名称引用内置函数时如何执行它们,如何通过函数名称后括号内的参数,给函数传递信息。例如数传递信息。例如printfprintf()()函数的第一个参数通常是一个字符串,其后的参数函数的第一个参数通常是一个字符串,其后的参数(可能没有可能没有)是一系列变量或要显
6、示其值的表达式是一系列变量或要显示其值的表达式。uu 定义函数定义函数uu Return Return语句语句C入门经典(第入门经典(第4版)版)8.2.1 定义函数 创建一个函数时,必须指定函数头作为函数定义的第一行,跟着是这个创建一个函数时,必须指定函数头作为函数定义的第一行,跟着是这个函数放在括号内的执行代码。函数头后面放在括号内的代码块称为函数体。函数放在括号内的执行代码。函数头后面放在括号内的代码块称为函数体。C入门经典(第入门经典(第4版)版)8.2.2 return语句 returnreturn语句允许退出函数,从调用函数中发生调用的那一点继续执行。语句允许退出函数,从调用函数中
7、发生调用的那一点继续执行。returnreturn语句最简单的形式如下:语句最简单的形式如下:return;return;C入门经典(第入门经典(第4版)版)8.3 按值传递机制 这个重点是:这个重点是:valuelvaluel和和value2value2的副本作为变元传送给函数,而没有传送变的副本作为变元传送给函数,而没有传送变量本身。也就是说,函数不能改变存储在量本身。也就是说,函数不能改变存储在value1value1或或value2value2中的值。例如,如果中的值。例如,如果给两变量输入给两变量输入4.04.0和和6.06.0,编译器会在堆栈上创建这两个值的副本,在调用,编译器会在
8、堆栈上创建这两个值的副本,在调用averageaverage()()函数时,函数时,average()average()函数会访问这些副本。这个机制是函数会访问这些副本。这个机制是C C语言中给函数传送变语言中给函数传送变元值的方式,称为按值传递元值的方式,称为按值传递(pass-by-value)(pass-by-value)机制机制。C入门经典(第入门经典(第4版)版)8.4 函数声明 函数声明是一个定义函数基本特性的语句,它定义了函数的名称、返回函数声明是一个定义函数基本特性的语句,它定义了函数的名称、返回值的类型和每个参数的类型。事实上,可以将它编写的和函数头一模一样,只值的类型和每个
9、参数的类型。事实上,可以将它编写的和函数头一模一样,只是要在尾部加一个分号。函数声明也叫做函数原型,因为它提供了函数的所有是要在尾部加一个分号。函数声明也叫做函数原型,因为它提供了函数的所有外部规范。函数原型能使编译器在使用这个函数的地方创建适当的指令,检查外部规范。函数原型能使编译器在使用这个函数的地方创建适当的指令,检查是否正确地使用它。在程序中包含头文件时,这个头文件就会在程序中为库函是否正确地使用它。在程序中包含头文件时,这个头文件就会在程序中为库函数添加函数原型。例如,头文件数添加函数原型。例如,头文件 含有含有printfprintf()()和和scanfscanf()()的函数原
10、型的函数原型。C入门经典(第入门经典(第4版)版)8.5 指针用作参数和返回值 前面介绍了如何将指针作为变元传递给函数。另外,如果函数修改在调前面介绍了如何将指针作为变元传递给函数。另外,如果函数修改在调用函数中定义的变量值,也需要使用指针变元。事实上这是唯一的方法。下面用函数中定义的变量值,也需要使用指针变元。事实上这是唯一的方法。下面用另一个实例来探讨用另一个实例来探讨。uu 常量参数常量参数 uu 从函数中返回指针值从函数中返回指针值 uu 在函数中递增指针在函数中递增指针C入门经典(第入门经典(第4版)版)8.5.1 常量参数 可以使用可以使用constconst关键字修饰函数参数,这
11、表示函数将传送给参数的变元看关键字修饰函数参数,这表示函数将传送给参数的变元看做一个常量。由于变元是按值传送的,所以只有参数是一个指针时,这个关键做一个常量。由于变元是按值传送的,所以只有参数是一个指针时,这个关键字才有效。一般将字才有效。一般将constconst关键字应用于指针参数,指定函数不修改该指针指向关键字应用于指针参数,指定函数不修改该指针指向的值。换言之,函数体中的代码不修改指针变元指向的值的值。换言之,函数体中的代码不修改指针变元指向的值。C入门经典(第入门经典(第4版)版)8.5.2 从函数中返回指针值 前面介绍了如何从函数中返回数值,学习了如何使用指针作为变元,以前面介绍了
12、如何从函数中返回数值,学习了如何使用指针作为变元,以及如何将指针存储到作为变元传送的地址中。还可以从函数中返回指针及如何将指针存储到作为变元传送的地址中。还可以从函数中返回指针。C入门经典(第入门经典(第4版)版)8.5.3 在函数中递增指针 使用数组名称作为函数的变元时,会把数组起始地址的副本传给函数。使用数组名称作为函数的变元时,会把数组起始地址的副本传给函数。因此,可以把接收的数值看成指针,然后递增或递减它。因此,可以把接收的数值看成指针,然后递增或递减它。C入门经典(第入门经典(第4版)版)8.6 小结 本章尚未完成函数的讨论,所以第本章尚未完成函数的讨论,所以第9 9章的最后将通过另一个例子,介绍使章的最后将通过另一个例子,介绍使用函数的更多内容用函数的更多内容。