c语言基础篇D
D1.函数概述
- 一个c程序可以由一个主函数和若干个其他函数构成,一个较大的程序可分为若干个程序模块,每一个模块用来实现一个特定的功能。在高级语言中用子程序实现模块的功能。子函数由函数来完成
- 一个c程序由一个或多个程序模块构成,每一个程序模块作为一个源程序文件。对于较大的程序。通常将程序内容分别放在若干个源文件中,再有若干源程序文件组成一个c程序。
- 一个源程序文件可以为多个c程序公用
- 一个源程序文件由一个或多个函数以及其他有关内容(命令行,数据定义)组成。一个源程序文件是一个编译单位,在程序编译时是以源程序文件为单位进行编译的。而不是以函数为单位编译的。
- c程序的执行是从main函数开始的,如果在main函数中调用其它函数,在调用后流程返回到main函数,在main函数中结束整个程序的运行
- 所有函数都是平行的,在定义函数时是分别进行的,是互相独立的。一个函数并不从属于另一函数,即函数不能嵌套定义。函数间可以互相调用,但不能调用main函数。mian函数是系统调用
D2.从用户角度看两种函数
- 标准函数
- 即库函数。这是由系统提供的,用户不必自己定义这些函数,可以直接使用它们。
- 不同的c系统提供的库函数的数量和功能会有些不同,但许多基本的函数是共同的
- c编译系统提供的库函数,只需用#include命令把有关的头文件包含到本文件模块中即可
- 用户自己定义的函数。用以解决用户的专门需要
D3.从函数的形式看两种函数
- 无参函数
- 无参函数一般用来执行指定的一组操作,在调用无参函数时,主调函数不向被调用函数传递数据
- 有参函数
- 主调函数在调用被调用函数时,通过参数向被调用函数传递数据
D4,函数的定义
- 定义的内容
- 指定函数的名字
- 指定函数的类型,函数值的类型
- 指定函数的参数名字和类型,以便在调用函数时向它们传递数据。对无参函数不需要
- 指定函数的功能,应当完成什么操作,做什么,在函数体中解决
- c语言规定,在函数中用到的所有函数,必须“先定义,后使用
- 定义无参函数
- 定义有参函数
- 定义空函数
D5.函数的参数
- 形式参数
- 实际参数
- 主调函数中调用一个函数时,函数名后面括弧的参数(实参)
- 关于形参和实参的说明
- 在定义函数中指定的形参,在未出现函数调用时,它们并不占用内存中的存储单元。只有在发生函数调用时,函数max中形参才被分配内存单元。在调用解释后,形参所占的内存单元也被释放
- 实参可以是常量,变量或表达式
- 在被定义的函数中,必须指定形参的类型
- 实参和形参的类型应相同或赋值兼容
- 实参向形参的数据传递是单向“值传递”,只能由实参传给形参,而不能由形参传回来给实参。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用解释后,形参单元被释放,实参单元仍保留并维持原值
D6.函数的返回值
- 类型表示符:函数返回值的数据类型
- 函数返回值:return后面的括弧中的值作为函数待会的值(函数返回值)
- 说明
- 函数的返回值是通过函数中的return语句获得的
- 函数的返回值应当属于某一个确定的类型,在定义函数时指定函数返回值的类型
- 在定义函数时指定的函数类型一般应该和return语句中的表达式类型一致(如果不一致,则以函数类型为准)
- 对于不带回值的函数,应当用“void”定义函数为“无类型”(空类型)。此时在函数体要么没有return语句,要么return语句为0
D7.函数调用的一般形式
- 函数调用的一般形式:函数名(实参表列)
- 说明
- 如果调用无参函数,则“实参表列”可以,没有,但括弧不能省略
- 如果实参表列包含多个实参,则各参数间用逗号隔开。实参与形参的个数应相等,顺序对应,类型应匹配
- 函数参数
- 函数原型的一般形式
- 函数类型 函数名(参数类型1,参数类型2.)
- 函数类型 函数名(参数类型1 参数名1,参数类型2 参数名2)
- 注意
- 函数的“定义”和“声明”不是一回事
- 函数的定义是指对函数功能的确立,包括指定函数名,函数值类型,形参及其类型,函数体等,它是一个完整的,独立的函数单位
- 函数的声明的作用则是把函数的名字,函数类型以及形参的类型,个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查
D8.数组参数与数组
- 数组元素作函数参数
- 数组元素可以作为函数的实参,与用变量作实参一样,是单向传递,“值传送”
- 数组名作函数参数
- 可以用数组名作函数参数,此时并不是将该数组中全部元素传递给锁对应的形参,由于数组名代表数组的首地址,只是将数组的首元素的地址传递给所对应的形参,对应的形参应当是数组名或指针变量
- 说明
- 程序中用数组名作函数实参,函数average的形参也定义数组。
- 注意
- 主调函数和被调用函数分别定义数组,array是形参数组名,score是实参数组名,分别在所在函数中定义,不只是一方定义
- 实参数组与形参数组类型应一直(float型)
- 用数组作为函数参数,在调用函数时并不另外开辟一个存放形参数组的空间,这点和用变量作函数参数不同的,数组名代表数组的首元素的地址,用数组名作函数实参时,只是将实参数组的首元素的地址传给形参数组
- 变量的作用域
- 局部变量
- 在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些函数
- 主函数中定义的变量只在主函数中有效,而不因为在主函数中定义而在整个文件或程序中有效
- 主函数也不能使用其他函数中定义的变量
- 不同函数中可以使用相同名字的变量,它们代表不同的对象,互不干扰、
- 形式参数也是局部变量
- 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,也称为“程序块”
- 全局变量
- 在函数外定义的变量称为外部变量,外部变量是全局变量(全程变量)。全局变量可以为本温江中其他函数所共用。它的有效范围从定义变量的位置开始到本源文件结束
- 注意
- 全局变量在程序的全部执行过程中都占用存储单元,而不是仅需要时才开辟单元
- 使用全局变量过多,会降低程序的清晰性。在各个函数执行都可能改变外部变量的值
- 它降低函数的通用性,因为函数在执行时要依赖于其所在的外部变量。
- 静态变量
- 静态局部变量
- 当函数中的局部变量的值在函数调用结束后不消失而保留原值时,该变量称为静态局部变量,用关键字static进行声明
- 静态局部变量属于静态存储类别,在静态存储区内分配存单元。在程序整个运行期间都不释放
- 对静态局部碧昂量是在编译时赋初值的。既只赋初值一次。
- 如在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)
- 虽然静态局部变量在函数调用结束后仍然存在,但其他函数不能引用它
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/26160.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!