第八章 函数初探
函数(function)
是完成特定任务的独立程序代码
语法规则定义了函数的结构和使用方式
好处:
- 可以省去编写重复代码的苦闷
- 可以让程序更加模块化,提高代码可读性
- 方便后期修改、完善
函数的种类
种类
- 内置函数
- 由C语言系统提供
- 需要在程序前包含定义函数的头文件
见图h
- 自定义函数
- 不带参数
- 带参数
- 内置函数
常用的内置函数
见图i、j
system函数常见用法:
1、system(“pause”); //冻结屏幕,便于观察程序的执行结果
2、system(“cls”); //清屏操作
3、system(“color 4E”); //修改背景色及前景色
4、system(“shutdown /r /t 180”); //设置自动关机
内置函数补充
- malloc()
- malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存
- 分配长度为num_bytes字节的内存块
- 函数原型:extern void * malloc(unsigned int num_bytes)
- 如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL
- 当内存不再使用时,应使用free()函数将内存块释放(原始内存中的数据保持不变)
1 |
|
1 |
|
注意1:
calloc作用与molloc类似
1、不需要强转,直接返回数组
2、两个参数,默认初始化数组元素
注意2:
关于free函数:
1、必须是通过molloc、calloc或relloc分配内存的指针
2、释放的指针必须是初始分配的地址,进行运算后需要恢复
- realloc()
- 原型:extern void *realloc(void *mem_address, unsigned int newsize);
- 用法:#include <stdlib.h> 有些编译器需要#include <alloc.h>
- 功能:改变mem_address所指内存区域的大小为newsize长度
- 说明:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL
- 当内存不再使用时,应使用free()函数将内存块释放(原始内存中的数据保持不变)
示例:
1 |
|
自定义函数
- 函数定义
1 | return_type function_name([datatype1 arg1],[datatype arg2,[...]]) |
- 函数三要素
- 返回值类型
- 函数名
- 参数列表
书写自定义函数
- 自定义函数的完整写法
1 |
|
注意:
1、函数原型与函数定义的头部类似,最后以分号结尾
2、函数原型中的参数名称可以省略,只写参数类型
练习:
1 | /* |
带返回值的函数
- C语言中的返回值
- 关键字:return
- 只能返回一个值,不能返回多个值
- 返回值类型必须与原型中的返回值类型匹配
- return会立即终止函数并返回,可返回空值
函数示例
1 |
|
带参函数
- 形式参数和实际参数
1 |
|
1 | int main() |
- 示例
1 |
|
- 练习
1 |
|
递归
- 函数调用自己的过程称为递归(recursion)
1 | int factorial(int num) |
1 |
|
使用递归时的注意点:
1、有反复的执行过程(调用自己)
2、有跳出反复执行过程的条件(出口)