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函数是程序的入口,也是程序的出口
调用其他函数的函数称为主调函数
被调用的函数称为被调函数
当调用一个函数时,系统为被调函数的形参分配内存空间,调用完毕返回主调函数时,该空间被释放
函数的声明 |
函数的声明是一个类似变量声明的语句,以分号结尾。
库函数的声明 |
形参和实参 |
实参出现在主调函数中,进入被调函数后,将值传递给形参,本身不能被使用。
a.形参只有在被调用时才分配内存空间,调用结束后,即刻释放所分配的内存单元,所以实/形参是不同的变量,在内存中位于不同的位置
b.在进行函数调用前,实参必须具有确定的值,以便把值传递给形参,因此,应先使用赋值、输入等方法使实参获得确定的值
c.实参、形参在类型、数量、顺序上应严格一致,否则会发生“类型不匹配”错误
d.函数调用时发生的数据传递是单向的,只能从实参传给形参,反之则不行,因此函数调用时,形参值发生改变,实参不会
e.有一种例外是当形/实参是指针型变量时,传递的是内存地址,那么在函数调用过程中传递给被调函数的是实参的地址,在被调函数内使用的也是实参的地址,即是实参本身的内空,所以此时,实参的值会发生改变。
怎么造出高质量函数 |
一个高质量函数应该高内聚、低耦合,每个函数只完成程序要求的独立子功能,并且与其他函数间的联系最少且接口简单
内聚性:指软件一个模块内部各个元素彼此结合的紧密程度的一种度量;联系越紧,内聚性越高
耦合性:指软件系统中各模块间相互联系紧密程度的一种度量;联系越紧,耦合性越高,模块独立性则越差
简单的说:适函数时,参数、返回值尽量的少
高内聚、低耦合:软件系统中,各模块应功能独立,尽量保持“距离”,而模块内部的元素(属性,方法,变量内容)应高度紧密,不能脱离联系
变量的作用域 |
全局变量:在所有函数外部定义的变量,它能在从定义位置到整个程序结束前使用,如果变量的使用发生在它定义的位置之前,则会报错。
局部变量:在一个函数内部定义的变量,它能在定义它的函数内部使用。
命名冲突:
1、局部变量VS局部变量,在同一个函数内部,局部变量不能重名,否则会报错,但在不同的函数间,局部变量可重名。
2、局部变量VS全局变量,局部变量会屏蔽掉全局变量。
相关文章推荐
- 补.从零开始学习C语言--获取时间函数
- 补.从零开始学习C语言--跨函数使用内存
- 从零开始学习C语言(一)之读取文本文件(函数fgets)
- 【零基础学习iOS开发】【02-C语言】10-函数
- c语言学习之基础知识点介绍(十九):内存操作函数
- 【学习笔记】【C语言】static和extern对函数的作用
- C语言学习之一:sprintf()函数
- C语言学习10:结构体,结构体应用,联合用法,枚举,fopen函数使用,fseek,ftell的作用和文件结束符EOF,数组和文件交换数据,个人信息管理。
- C语言再学习 -- 常用头文件和函数(转)
- c语言 函数 学习笔记
- 从零开始学习jQuery (九) jQuery工具函数
- C语言再学习 -- 常用头文件和函数
- C语言从零开始——day2(函数第一天)
- C语言学习笔记------伊能C语言学习笔记-----外部函数
- C语言学习之输入/输出函数第三讲
- 从零开始学习C语言 源代码
- C语言指针学习:指向函数的指针
- 10.从零开始学习C语言--switch判断语句
- C语言可变参数个数的函数学习
- C语言学习笔记:14_内部函数和外部函数