目录
前言
一个较大的程序一般分为若干个小的程序模块,每个模块实现一个特定的功能。所有的 高级语言中都有子程序的概念,用子程序来实现模块的功能。 在 C 语言中,子程序的功能是由函数来完成的。函数是 C 语言源程序的基本组成单位, 用来实现特定的功能。一个 C 程序可以由一个主函数和若干个子函数构成。由主函数调用其 他函数,其他函数之间也可以互相调用。可以说,C 程序的全部工作是由函数完成的,所以 也把 C 语言称为函数式语言。 由于采用了函数模块式的结构,使 C 语言易于实现结构化程序设计,模块化的程序层次 结构清晰,便于程序的编写、阅读和调试。 在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。程序 设计时要善于利用函数,以减少重复编写程序段的工作量。
(1)一个源程序文件由一个或多个函数组成。一个源程序文件是一个编译单位,即以源 文件为单位进行编译,而不是以函数为单位进行编译。
(2)一个 C 程序由一个或多个源程序文件组成。对较大的程序,一般不希望全放在一个 文件中,而将函数及其他有关内容(如指令、数据声明与定义等)分别放到若干个源文件 中,再由源文件组成一个 C 程序,分别编写和编译,从而提高工作效率。一个源文件可以为多 个 C 程序公用。 (3)C 程序的执行从 main 函数开始,调用其他函数后流程回到 main 函数,在 main 函数 中结束整个程序的运行。main 函数是由系统定义的函数。
(4)所有函数都是平行的,即在定义函数时是互相独立的,一个函数并不从属于另一个 函数,即函数不能嵌套定义。函数可以互相调用,但不能调用 main 函数。
(5)从函数定义的角度看,函数分为标准函数和用户自定义函数。 ①标准函数即库函数,如由 C 编译系统提供,用户无须定义,也不必在程序中作类型说 明,只需在程序前包含该函数原型的头文件,即可在程序中直接调用,printf 函数和 scanf 函 数。不同的编译系统提供的库函数的数量和功能不同,但有一些基本的函数是共同的。 ②用户自定义函数是由用户按需要编写的函数,对于用户自定义函数,不仅要在程序中 定义函数,而且要在主调函数模块中对该被调函数进行类型声明后才能使用。
(6)从函数的形式看,函数分无参函数和有参函数。
①无参函数。在调用无参函数时,主调函数并不将数据传送给被调函数,而用来执行指 定的一组操作。无参函数可以返回或不返回函数值,一般不返回函数值。 ②有参函数。在调用函数时,在主调函数和被调用函数之间有参数传递,即主调函数将 数据传给被调用函数使用,被调用函数中的返回数据供主调函数使用。
本人每天不定时分享一些自己以往总结的笔记
一.函数的定义
c语言要求,在程序中遇到的所有函数,都必须“先定义,后使用”的原则。
1.函数定义包括的内容:
Ⅰ.指定函数类别
表明该函数是内部函数(static)还是外部函数(extern)。若为内部 函数,则该函数只能在定义它的文件中被使用,而不能被引用到其他文件中;若为外部函 数,则该函数可以被引用到整个程序的其他文件中。若省略函数的类别,系统则默认为外部 函数。
Ⅱ.指定函数类型
即函数返回值的类型。表明该函数是否有返回值,若没有返回 值,则该部分应为 void;若有返回值,则该部分要标明返回值的具体类型,并与 return 语句 中的表达式类型相一致。若省略函数的返回值类型,则系统默认为 int。
Ⅲ.指定函数名
指定函数名,以便以后按名调用。函数名是一个标识符,应符合标识符的起名规 则。函数名是函数的入口地址。
Ⅳ.指定函数的参数名称和类型
指定函数的参数名称和类型,以便在调用函数时传递数据。对无参函数该项为 Void 或为空。
Ⅴ.指定函数的函数体
指定函数的函数体,即函数的执行部分。函数体是函数的主体,只有按功能编写相 应的语句行,才能实现程序的功能。
2.函数定义的一般形式:
Ⅰ.有参函数的定义形式:
类型标识符 函数名(形式参数表列) /*函数的首部,形式参数简称为形参*/
{
声明部分
执行部分
}
Ⅱ.无参函数的定义形式:
类型标识符 函数名()
{
声明部分
执行部分
}
注:若函数无返回值,可用类型标识符void表示。
二.函数的调用形式
1.有参函数的调用形式:
函数名(实际参数表列)
2.无参函数的调用形式:
函数名()
注:无参函数调用时,函数名后面的“ ()”不能省略。