一、C程序中的函数
定义:函数是能够完成指定任务的独立的代码单元
通用形式
DataType funcName(parameterList)
{
statements;
}
在C语言中,使用一个函数之前,要先对其进行声明,指明函数的返回值类型、函数名和参数列标。函数的声明被称为函数原型。
函数调用:决定了函数执行的位置与时机。
函数定义:用具体代码描述函数的功能。
#include <stdio.h>
void showStar(void); //函数原型
int main(void)
{
showStar(); //函数调用
return 0;
}
void showStar(void) //函数定义
{
printf("***************\n");
}
函数原型的参数列表只是一种声明,并不创建真正的变量,所以函数原型的形参名可以省略
int retrunMin(int a, int b); //接收两个整型,返回较小的那个整数
int returnMin(int, int); //这种写法也是正确的
需要注意的是,在函数定义中,形参名是绝对不可以省略的。
如果函数比较简短,可以直接使用定义代替声明(个人不是很喜欢这种写法)
#include <stdio.h>
int returnMin(int a, int b) //在函数调用前直接使用函数定义代替声明
{
return ((a > b) ? b : a);
}
int main(void)
{
int a = 5;
int b = 1;
int result = 0;
result = returnMin(a, b); //利用result接收returnMin()函数的返回值
printf("The less in %d an %d is %d.\n", a, b, result);
return 0;
}
以上代码中,mian()函数中的变量a、b和returnMin()函数形参列表中的变量同名,但却是完全不同的两组变量。它们在内存中的位置完全不同,是四个互相独立的变量。
函数中的变量属于局部变量,是函数私有的。所以可以在不同的函数中定义同名变量,不会出现冲突。
在main()函数中,传递给returnMin()函数的变量a和b是两个实际的值,被称为实际参数,简称实参;而函数原型和函数定义的参数列表中的参数被称为形式参数,简称形参
在函数定义中,函数名前面的返回值类型要与函数体中return后面的值的类型相匹配。若一个函数没有返回值,可以用void代替返回值类型,在函数体中也就不需要return语句。
相同的道理,在函数调用时传递给函数的实参的数量、类型和顺序,都要与函数声明、函数定义的形参列表相匹配
二、递归
定义:C允许函数调用自身,这一过程被称为递归
递归的特点
(1)每一级递归都创建都属于自己的局部变量,只是这些变量都是同名的。
(2)每次函数调用都会返回一次。函数执行结束后,程序的控制权将会返还给上一级递归,且必须按调用的顺序逐级返回,不能越级。
(3)递归之前的语句,按照递归调用的顺序依次执行。
(4)递归之后的语句,按照与递归调用相反的顺序执行。
(5)每次递归只是重新创建新的同名变量,但不复制函数代码。
(6)递归函数必须包含能让递归调用停止的语句,否则递归调用会以极快的速度压榨内存空间。
三、指针简介
定义:指针是一个值为内存地址的变量。即,指针类型的变量用于存储内存地址
取地址运算符:&
解引用运算符:*(星号)