对函数的剖析一

对函数的剖析一

  • 一:前言
  • 二:库函数
    • 1:标椎库
    • 2:头文件
  • 三:自定义函数
    • 1:语法形式:
    • 2:形参和实参
    • 3:return语句
    • 4:数组做函数参数
    • 5:嵌套调用

一:前言

不同于数学中的函数,在c语言中可以理解成子函数,是完成某项特定任务的一小段代码。
C语言程序就是由无数个小的函数组成的。
可以分成两类:库函数和自定义函数。

二:库函数

1:标椎库

C语言标准中规定了库函数的各种语法规则,但不提供库函数,C语言的国际标准ANSIC规定了一些常用的函数的标准,被称为标准库,不同的编译器厂商根据标准给出了一系列函数的实现。这些函数被称为库函数。如:printf,scanf.库函数也是函数,但这些函数可以直接使用,明显提高了效率。

2:头文件

库函数的使用需要头文件的声明。不同的库函数可能需要不同的头文件。
对函数的剖析一_第1张图片

三:自定义函数

1:语法形式:

返回类型+函数名(形式参数)
{函数体
}

函数返回类型可以是空类型,表示什么也不返回。
函数也可以没有参数,即void ,如果有参数,必须明确函数参数的类型和名字,以及参数个数。

2:形参和实参

实参就是实际传递给函数的参数
形参:只是形式上存在,不会向内存申请空间,只有在函数被调用时,为了存放实参传递过来的值,才会向内存申请空间。

3:return语句

1:return后面可以是一个具体的值,也可以是一个表达式,是表达式时,则先计算表达式的结果,再返回表达式的结果。
2:return后面可以什么也没有,适合函数返回类型是空类型的适合,即void。return执行后,后面的代码就不执行了。
对函数的剖析一_第2张图片

3:return后面的返回的值和返回类型不一致时,系统自动将返回的值转换为函数的返回类型。对函数的剖析一_第3张图片

综上所述:看代码:对函数的剖析一_第4张图片
4:如果函数中出现if等分支语句,要保证每种情况下都有return返回,否则出现编译错误。如下图:当i!=5时,没有返回值。对函数的剖析一_第5张图片正确写法:
对函数的剖析一_第6张图片

4:数组做函数参数

数组传参:
1:函数的形式参数要和数组的实参个数相同
2:函数的实参是数组,形参也必须是数组
3:形参如果是一维数组,数组大小可以省略
4:形参如果是二维数组,行可以省略,列不可以
5:数组传参,形参不会创建新的数组
6:形参操作的数组和实参是同一个数组,不会开辟新的地址
一维数组传参举例:
#include
void set_arr(int arr[], int sz)
{
for (int i = 0; i < sz; i++)
{
arr[i] = -1;

}

}
void printf_arr(int arr[], int sz)//两个形参
{
for (int i = 0; i < sz; i++)
{
printf(“%d “, arr[i]);
}
printf(”\n”);
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,0 };

int sz = sizeof(arr) / sizeof(arr[0]);
printf_arr(arr, sz);//先打印一次  //两个实参arr,sz
//写一个函数,让arr中的元素全部变成-1
set_arr(arr, sz);
//写一个函数,打印新的arr数组
printf_arr(arr, sz);

}对函数的剖析一_第7张图片二维数组举例:
对函数的剖析一_第8张图片

5:嵌套调用

嵌套调用就是函数间的相互调用,函数可以嵌套调用,不可以嵌套定义
#include
//获取某年某月有多少天
int get_days_of_months(int y, int m)
{
int days[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};//得到天数
int d = days[m];
if (is_leap_year(y)&&m == 2)//函数的嵌套调用
{
d += 1;
}
return d;
}
int is_leap_year(int y)//判断是否是闰年的函数
{
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
return 1;
else
return 0;
}
int main()
{
int y = 0;
int m = 0;
scanf(“%d %d”, &y, &m);
int d = get_days_of_months(y, m);
printf(“%d”, d);
return 0;
}
对函数的剖析一_第9张图片

你可能感兴趣的:(c语言)