您的位置:首页 > 编程语言 > C语言/C++

13.从零开始学习C语言--函数

2013-07-29 17:00 302 查看
函数存在价值
避免同样功能的代码被反复编写;

面向过程,模块化编程思想,具有特定独立功能的代码块单独成“模块”,能够接收数据,对数据进行处理,并将结果返回(当然可以不接收数据也不返回);

函数是一种工具,为了能够解决大量类似问题而设计的;

C语言的基本单位是函数,C++是类。

函数的定义
格式:
函数返回类型 + 函数名 (形参表)
{
函数执行体;
}


函数返回类型又称函数类型;

return 表达式;

如果函数返回类型和函数执行体中的“return 表达式”中的表达式类型不同,以最终函数返回值的类型以函数返回类型为准;

int f(void)
{
return 10.5;
}
实际返回值为10;


函数执行体中的“return 表达式”(可无)的作用,终止被调函数,并向主调函数返回表达式的值,如果没有表达式,则终止被调函数,不返回任何值;

注意:break和switch终止循环,return终止函数

函数的分类
有参函数 无参函数

有返回值函数 无返回值函数

库函数 用户自定义函数

值传递函数 地址传递函数

普通函数 主函数(main函数)

一个程序必须有且只有一个main函数

主函数可以调用普通函数,反之不行

普通函数可以互相调用

Main函数是程序的入口,也是程序的出口

调用其他函数的函数称为主调函数

被调用的函数称为被调函数

当调用一个函数时,系统为被调函数的形参分配内存空间,调用完毕返回主调函数时,该空间被释放

函数的声明
因为编译器从上向下编译,如果被调函数造在主调函数之后,则必须在主调函数前声明被调函数,告诉编译器即将调用一个函数,以及这个函数的函数名、返回类型、形参等信息。

函数的声明是一个类似变量声明的语句,以分号结尾。

库函数的声明
通过 # include <头文件.h> 来声明,如:# include <stdio.h> 声明标准输入输出库

形参和实参
形参出现在函数定义中,只能在该函数内使用。

实参出现在主调函数中,进入被调函数后,将值传递给形参,本身不能被使用。

a.形参只有在被调用时才分配内存空间,调用结束后,即刻释放所分配的内存单元,所以实/形参是不同的变量,在内存中位于不同的位置

b.在进行函数调用前,实参必须具有确定的值,以便把值传递给形参,因此,应先使用赋值、输入等方法使实参获得确定的值

c.实参、形参在类型、数量、顺序上应严格一致,否则会发生“类型不匹配”错误

d.函数调用时发生的数据传递是单向的,只能从实参传给形参,反之则不行,因此函数调用时,形参值发生改变,实参不会

e.有一种例外是当形/实参是指针型变量时,传递的是内存地址,那么在函数调用过程中传递给被调函数的是实参的地址,在被调函数内使用的也是实参的地址,即是实参本身的内空,所以此时,实参的值会发生改变。

怎么造出高质量函数
一个函数的功能尽可能独立,多模仿、学习大牛的代码

一个高质量函数应该高内聚、低耦合,每个函数只完成程序要求的独立子功能,并且与其他函数间的联系最少且接口简单

内聚性:指软件一个模块内部各个元素彼此结合的紧密程度的一种度量;联系越紧,内聚性越高

耦合性:指软件系统中各模块间相互联系紧密程度的一种度量;联系越紧,耦合性越高,模块独立性则越差

简单的说:适函数时,参数、返回值尽量的少

高内聚、低耦合:软件系统中,各模块应功能独立,尽量保持“距离”,而模块内部的元素(属性,方法,变量内容)应高度紧密,不能脱离联系

变量的作用域
按作用域可分为全局变量和局部变量;

全局变量:在所有函数外部定义的变量,它能在从定义位置到整个程序结束前使用,如果变量的使用发生在它定义的位置之前,则会报错。

局部变量:在一个函数内部定义的变量,它能在定义它的函数内部使用。

命名冲突:

1、局部变量VS局部变量,在同一个函数内部,局部变量不能重名,否则会报错,但在不同的函数间,局部变量可重名。

2、局部变量VS全局变量,局部变量会屏蔽掉全局变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: