- 一、函数
1、分类:(1)库函数:IO库函数,字符串操作库函数,字符操作库函数,时间\日期库函数,数学函数,其他库函数。
(2)自定义函数:与库函数相同,有函数名,返回值类型和函数参数,但都又自己设计。其组成如下:
ret_type fun_name (para1,*)
{
statement;//语句项
}
ret_type 返回类型
fun_name 函数名
para1 函数参数
2、参数:(1)实际参数(实参):真实传给函数的参数,可以是常量、变量、表达式、函数等,但在进行函数调用的时候,它们必须有确定的值,以便把这些值传给形参。
(2)形式参数(形参):函数名后括号中的变量,形式参数只有在被调用时才实例化(分配存储单元),当调用完 后会自动销毁,因此形参只在函数中才有效。
注:形参实例化之后其实相当于实参的一份临时拷贝。
3、调用:(1)传值调用:函数形参与实参占有不同的内存块,对形参的修改不会影响实参。
(2)传址调用:把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式,即可在函数内部直接操作函数外部的变量。
void Swap1(int x,int y)
{
int tmp = 0;
tmp = x;
x = y;
y = tmp;
}
void Swap2(int* px,int* py)
{
int tmp = 0;
tmp = *px;
*px = *py;
*py = tmp;
}
int main()
{
int a=10;
int b=20;
printf("a=%d,b=%d\n",a,b);
Swap1(a,b);//传值调用
Swap2(a,b);//传址调用
printf("a=%d,b=%d\n",a,b);
//int a = 10;
//a = 20;
//int* p = &a;
//*p = 20;
system("pause");
return 0;
}
4、函数之间可以嵌套调用以及链式访问。
eg: printf("%d",printf("%d",printf("%d",43)));
//1 //2 //43
最终输出结果为:4321
5、(1)函数声明:告诉编译器函数的返回类型、函数名和参数,但具体是否存在无关紧要,函数声明一般在定义之前,先声明后使用,其声明一般要放在头文件中。
(2)函数定义:函数的具体实现,交代函数的功能实现。
#ifdef __TEST_H__
#define __TEST_H__
//函数的声明
int Add(int x,int y);
#endif //__TEST_H__
6、具体实例:参照本人博客《C语言 Example 四》。
- 二、递归
1、递归:程序调用自身的编程技巧。思考方式为:大事化小。
2、递归的两个必要条件:(1)存在限制条件,当满足这个限制条件时,递归不在继续。(2)每次递归后越来越接近这个限制条件。