C语言知识回顾——函数

【1】函数概述
在C语言中,子程序的作用是由函数完成的;
一个C语言可由一个主函数和若干个其他函数构成,并且只能有一个主函数
由主函数来调用其他函数,其他子函数之间也可以相互调用;

C程序的执行总是从main()函数开始。调用其他函数完毕后,程序流程回到main()函数,继续执行主函数的其他语句,直到main()函数结束,则整个程序的运行结束。

从用户使用的角度看,函数分类如下:
①标准函数,即库函数。这些函数由系统提供,可直接使用。
②自定义的函数。用以解决用户需要时设计定义的函数。

从函数的形式看,函数分类如下:
⑴无参函数
⑵有参函数

【2】函数参数和函数返回值
1.形式参数和实际参数
●在定义函数时,函数名后面括号中的变量称为形式参数(形参)。
●在主调函数中,函数名后面括号中的参数(可以是一个表达式)称为实际参数(实参)。

2.函数的返回值
(1)定义:函数的返回值就是通过函数调用使主调函数能得到一个确定的值。
(2)表达形式:return 表达式;或return(表达式);或 return

●return语句中的表达式值的类型必须与函数首部所说明的类型一致。若类型不一致,则以函数值的类型为准,由系统自动进行强制转换。
●当函数没有指明返回值,或没有返回语句时,函数返回一个不确定的值。为了使函数不返回任何值,可以使用void定义无类型函数。

【3】函数的调用

函数调用的一般形式:函数名(实参表列);

1.函数的调用可分为调用无参函数和调用有参函数两种
●调用无参函数时,不用“实参列表”,但括号不能省略。
●调用有参函数时,若实参列表中有多个实参,各参数间用逗号隔开。实参与形参要求类型一致。

2.函数的说明
C语言中,除了主函数外,对于用户定义的函数要遵循先定义后使用的规则。把函数的定义放在调用之后,应该在调用之前对函数进行说明(或函数原型说明)

函数说明的一般形式如下:
类型名 函数名(参数类型1,参数类型2,…,参数类型n);

类型名 函数名(参数类型1 参数名1,参数类型2参数名2,…,参数类型n参数名n);

【4】函数的嵌套调用与递归调用
1.函数的嵌套调用
C语言的函数定义都是独立的,互相平行的。

C语句不允许嵌套定义函数,即一个函数内不能定义另一个函数,但可以嵌套调用函数,即在调用一个函数的过程中,又调用另一个函数。

2.函数的递归调用
在调用一个函数的过程中又出现直接间接地调用该函数本身的,称为函数的递归调用。

使用递归法解决问题,需符合的条件如下:
☆可以把要解决的问题转化为一个新的问题,而这个新的问题的解决方法仍与原来的解决方法相同,只是所处理的对象有规律地递增或递减;
☆可以应用这个转化过程使问题得到解决;
☆必须要有一个明确的结束递归的条件;

【5】数组作为函数参数
1.数组元素作为函数实参
数组元素可以作为函数的实参,与用变量作为实参一样,按照单向值传递的方式进行传递

2.数组名可以作为函数参数
可以用数组名作为函数参数,此时实参与形参都应用数组名,此时的数组名是整个数组的首地址。

【6】全局变量和局部变量
在函数内部定义的变量称为局部变量,只能在本函数内部使用。
在函数之外定义的变量称为外部变量,外部变量是全局变量。

全局变量可以为本文件中其他函数所共用,它的有效范围从定义变量开始到本文件结束。

如果在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被**“屏蔽”**,即此时外部变量不起作用。

【7】变量的存储类别
1.auto变量
当在函数内部或复合语句内定义变量时,如果没有指定存储类别,或使用了auto说明符,系统就认为所定义的变量具有自动类别。

2.register变量
寄存器变量也是自动类变量
它与auto变量的区别仅在于:用register说明变量是建议编译程序将变量的值保留在CPU 的寄存器中,而不是像一般变量那样占用内存单元。

3.静态存储类别的局部变量
当函数体(或复合语句)内部用static来说明一个变量时,可以称该变量为静态局部变量
它与auto 变量,register变量的本质区别如下:
1.在整个程序运行期间,静态局部变量在内存中的静态存储区中占据着永久性的存储单元。即使退出函数后,下次再进入该函数时,静态局部变量仍使用原来的存储单元。由于不释放这些存储单元,这些存储单元中的值得以保留,因而可以继续使用存储单元中原来的值。
2.静态局部变量的初值是在编译时赋予的,在程序执行期间不再赋以初值。对未赋值的局部变量,C语言编译程序自动给它赋初值为0。

发布了21 篇原创文章 · 获赞 44 · 访问量 1588

猜你喜欢

转载自blog.csdn.net/weixin_43964458/article/details/104429432