C语言第四章:函数

来源:互联网 发布:杭州淘宝培训学校 编辑:程序博客网 时间:2024/05/19 17:24

一、 函数:功能相对独立的代码段
1、 从定义的角度函数分为:库函数和用户定义函数(用户自己定义的函数)
2、 有返回值 和无返回值的函数
3、 从数据传送的角度分为:无参函数和有参函数
二、 自定义函数的书写格式
1、 函数定义分为三步:1>、声明 2>定义函数 3>调用函数
2、 基本格式: 返回值类型 函数名称(函数的参数){
函数体;}
三、 根据返回值和参数函数
1、 无参无返回值 void 函数名(){}//void 指的是空类型 ()无参数
2、 无参有返回值:int test(){ return 0;} //注意:函数体必须有return
1>、例子计算两个数的和
2>、接收的 值
3、 有参无返回值函数
1>、void 函数名(数据类型 变量 ⇒形参变量int n){
//n的作用域:从定义的位置开始,到函数的“}”结束
}
4、 有参有返回值 int test(int n ){函数体 return 0;}//多个形参可以使用逗号隔开
1>、例子 使用函数定义一个求最值的函数
5、 函数的参数 ,(函数定义的参数)形式参数和实际参数(一般是在函数的内部定义)
6、 注意:形参是什么类型的,实际参数也必须是什么类型的
1>、形参注意事项:在定义后并不会立即分配存储空间
2>、在函数被调用的时间才会真正的分配存储空间
3>、如果有多个形参可以使用逗号隔开
4>、形参的数据类型可以不同
5>、在函数的内部,不能定义和形参相同的参数
7、 主调函数:在那个里面调用,那个就是主调函数(比如main),实际参数出现在主调函数中,形参在被调函数的()里。

顺便可以复习OC中的方法,他们的区别?

四、 函数形参和实参的传值过程
1>、实参和形参数量上,类型上顺序上严格保持一致(如果类型不一致,会导致精度的丢失)
2>、实参可以是常量,表达式,函数 ,甚至是函数调用,但是必须要有确定的值
3>、把实参的值赋值给形参
4>、形参的值在函数的内部可以被修改,但是不会改变主调函数实参的值。
3、 函数的返回值
a) 、概念:是指函数被调用之后,执行函数体中得程序段所取得的并返回给主调函数的值
b) 、理解:被调函数返回给主调函数的值(主调和被调是相对的)
c) 、使用注意事项:函数返回值,用到关键字 return
i>、return 常量: return 0;
ii>、return 表达式: return a>b; return 三目运算符,算数表达式。。。
iii>、return (常量/变量/表达式)可以加上括号也可以省略。
Iiii>、函数的返回值的类型和return实际返回值类型应保持一致,如果两者不一致,则以return实际类型为准,自动转换类型。
d)、定义函数没有指定返回值类型,系统默认是int sum(int a,int b ){}
e)、函数的值只能通过return语句返回主调函数。
F)、不返回函数值的函数,可以明确定义为“空类型“,类型说明符”void“
函数的声明
1、 调用某个函数时要先进行声明,不声明会出现错误,系统不知道你的调用存不存在
2、 函数的声明:告诉编译器这个函数已经存在,告诉编译器被调函数的返回值类型,以便在主调函数处理被调函数的值
3、 函数声明的格式:返回值类型 函数名(形参);
4、 函数声明的注意事项:
1)、如果函数的返回值是int类型,此时可以不用声明
2)、如果被调用函数在主调函数之前,可以不用声明
六、函数的调用
注意事项:
1、 函数表达式(这种方式要求函数要有返回值)
2、 函数语句即一般形式加上分号 如:scanf(“%d ”,&b );
3、 函数的调用作为另一个函数的实参 sum(max(12,34),50); 这种方式要求该函数必须有返回值的。
函数的嵌套:C语言中允许嵌套的调用,不允许嵌套的定义
4、 各函数是平行的,所以不允许函数的嵌套定义
5、 变量名不可以和变量名同名

五、 递归函数
1、 递归函数:一个函数在它的内部调用自己称为递归调用,主调函数又是被调函数;
2、 递归调用:在递归函数中调用自己的操作就是递归调用
3、 递归调用注意:
1) 主调函数就是被调函数
2) 在递归函数中应该存在结束递归的条件
4、 构成递归的条件:
1) 存在自己调用自己
2) 存在一个条件能够让递归终止(否则是死循环)
3) 能够找到一个规律,让解决的问题规模缩小
5、 压栈的过程就是递归的过程(递推 出栈 迭代计算),
a) 一个整型数(An integer) // int num;
b) 一个指向整型数的指针(A pointer to an integer) int *p;
c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer) //int **p;
d) 一个有10个整型数的数组(An array of 10 integers)// int arr[10]
e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers) // int *a[10];
f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers) // int (*arr)[10]
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer) //int *function(int num) int (*a)(int);
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )// int (*a[10])(int);

答案是:
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer

六、 unix的命令
1、 pwd显示当前目录的名称
2、 cd 改变当前操作的目录
3、 who 显示当前用户名
4、 clear清屏
5、 mkdir 创建目录
6、 rm 删除文件
7、 rm –r 删除文件夹
8、 touch 创建文件
9、 open 打开 -q退出 -wq保持退出
10、 vi a.txt//创建
1、 i进入编辑模式
2、 esc退出编辑模式
3、 wq!保存并退出
11、 cat 查看文件内容
12、 man +命令查看命令的属性
八、#include指令
A、
1、#include <>是一个系统(编译器自带的)的头文件
2、如果使用用户定义的文件(可以是头文件也可以是普通文件) #include ””
3、#include是一个预处理指令,不需要分号,因为include是一个指令,不是语句。
B、文件包含命令的功能是把指定文件内容插入该命令位置取代命令行,

作用:把要包含的文件的内容替换到当前书写include的地方
include “tsz.txt ”
C、#include 文件搜索的顺序
1、当前目录:和main.c在同一个目录
2、#include 指令。包含文件
#inlclude “” 包含自定义目录
搜索顺序–→当前目录—→编译器目录-→找系统目录——-→报错

编译器的目录:

清理缓存:如果修改了编译器include的自定义文件后,运行发现没有改变
方法:清空缓存: product –→clean

0 0