目录
1.函数的分类
从使用者的观点分为
:
−
C
编译系统提供的标准库函数
−
用户自定义函数;
从函数间数据传送的有无分为
:
−
有参函数、无参函数
−
有返回值函数、无返回值函数;
从函数的调用分为
:
−
内部函数和外部函数。
2.函数的调用
1.传值调用和传址调用
我们在某些情况下对变量进行传值调用
eg.我们要实现一个比较两个数大小的函数
int Max(int x, int y)
{
if (x > y)
return x;//注意返回
else
return y;//注意返回
}
int main()
{
int a;
int b;
scanf("%d%d", &a, &b);
int c = Max(a, b);
printf("\n%d", c);
return 0;
}
但在另一些情况下我们传值调用无法实现我们的目的,例如需要返回的值有两个或多个,这时候我们考虑传址调用
eg.我们要实现一个交换两个数大小的函数
void Exc(int* px, int* py)//接收地址
{
int tmp=*px;//用指针变量修改a和b
*px =*py;
*py = tmp;
}
int main()
{
int a;
int b;
scanf("%d%d", &a, &b);
Exc(&a,&b);//将地址输入函数
printf("a=%d b=%d", a, b);
return 0;
}
2.嵌套调用和递归调用
1.嵌套调用
函数的嵌套调用是指在调用一个函数的过程中,该函数又调用另一个函数。在C
语言中
,
各函数均处于平等关系,任何一个函数都可以调用和被调用
,
但
main例外,main函数总是最先被调用
eg.打印两个数中较大的数
int Max(int x, int y)
{
return x > y ? x : y;
}
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%d", Max(a, b));
return 0;
}
2.递归调用
函数的递归调用是指在一个函数调用过程中又直接或间接调用自己, 这样的函数称为递归函数。
eg.求一个数的阶乘
int Fir(int x)
{
return x > 2 ? Fir(x - 1)*x : x;
}
int main()
{
int a;
scanf("%d", &a);
printf("%d",Fir(a));
return 0;
}
3.内部函数与外部函数
只能被本文件中的其他函数所调用的函数称为内部函数。
格式:
static 函数类型 函数名(形参)
内部函数也称静态函数
内部函数不能被其他文件中的函数使用,
所以在不同文件中可以使用相同名字的内部函数。
在一个文件内定义的函数, 也可以被其他文件内的函数调用, 这样的的函数称为外部函数。
格式:
extern 函数类型 函数名(形参)
说明:
在C
语言中
,
函数前如果无关键字
extern
, 隐含为外部函数。
在调用它的其他文件中,
用
extern加函数原型来声明所用的函数是外部函数。
4.函数的定义和声明
1.函数的定义
我们通常在源文件中进行函数的定义
形式
:
函数类型 函数名(参数表)
参数说明
{
数据说明
执行语句
}
eg.
void Displayboard(char arr[ROW][COL], int row, int col)
{
int i, j;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf(" %c ", arr[i][j]);
if (j < col - 1)
printf("|");
}
printf("\n");
if (i < row - 1)
{
for (j = 0; j < col; j++)
{
printf("---");
if (j < col - 1)
printf("|");
}
printf("\n");
}
}
}
2.函数的声明
我们通常在头文件中进行函数的声明
形式:
函数类型 函数名(参数表)分号
eg.
void Displayboard(char arr[ROW][COL], int row, int col);