目录
一、函数概念
C语⾔引⼊函数的概念,有些翻译为:⼦程序,⼦程序这种翻译更加准确⼀些。
C语⾔中的函数就是⼀个完成某项特定的任务的⼀⼩段代码。
在C语⾔中我们⼀般会⻅到两类函数:库函数 和 ⾃定义函数。 库函数相关头⽂件:https://zh.cppreference.com/w/c/header
二、形参和实参
函数的形式参数要和函数的实参个数匹配
函数的实参是数组,形参也是可以写成数组形式的
形参如果是⼀维数组,数组⼤⼩可以省略不写
形参如果是⼆维数组,⾏可以省略,但是列不能省略
数组传参,形参是不会创建新的数组的
形参操作的数组和实参的数组是同⼀个数组
三、嵌套调用和链式访问
3.1 嵌套调用
嵌套调⽤就是函数之间的互相调⽤
稍微⼤⼀些代码都是函数之间的嵌套调⽤,但是函数是不能嵌套定义的
3.2 链式访问
链式访问就是将⼀个函数的返回值作为另外⼀个函数的参数,像链条⼀样将函数串起来就是函数的链式访问
//⼀个有趣的代码
#include <stdio.h>
int main()
{
printf("%d", printf("%d", printf("%d", 43)));
return 0;
}
//printf函数返回的是打印在屏幕上的字符的个数。
//上⾯的例⼦中,我们就第⼀个printf打印的是第⼆个printf的返回值
// 第⼆个printf打印的是第三个printf的返回值。
//第三个printf打印43,在屏幕上打印2个字符,再返回2
//第⼆个printf打印2,在屏幕上打印1个字符,再放回1
//第⼀个printf打印1
//所以屏幕上最终打印:4321
四、函数的声明和定义
4.1 声明
#include <stdio.h>
int is_leap_year(int y);//函数声明
int main()
{
int y = 0;
scanf("%d", &y);
int r = is_leap_year(y); //函数调用
if (r == 1)
printf("闰年\n");
else
printf("⾮闰年\n");
return 0;
}
//函数定义
//判断⼀年是不是闰年
int is_leap_year(int y)
{
if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
return 1;
else
return 0;
}
4.2 static 和 extern
static 和 extern 都是C语言中的关键字。 static 是静态的意思,可用于修饰局部变量、全局变量、函数。extern 是用来声明外部符号的。
作用域:局部变量的作⽤域是变量所在的局部范围。 全局变量的作⽤域是整个⼯程(项⽬) ⽣命周期指的是变量的创建(申请内存)到变量的销毁(收回内存)之间的⼀个时间段。
1. 局部变量的⽣命周期是:进⼊作⽤域变量创建,⽣命周期开始,出作⽤域⽣命周期结束。
2. 全局变量的⽣命周期是:整个程序的⽣命周期。
4.2.1 static
-
static修饰局部变量:改变了变量的生命周期,生命周期改变本质上是改变了变量的存储类型。局部变量本来存储在内存的栈区中,被static修饰后存储到了静态区,与全局变量生命周期一样长。 使用建议:某个变量出了函数后,还想保留值,等待下一次进入函数继续使用。
-
static修饰全部变量:这个全局变量只能在本源文件内使用,不能在其它源文件中使用。 使用建议:一个全局变量,只想在所在的源文件内使用。
-
static修饰函数:与修饰全局变量一样
4.2.2 extern
exern是用来声明外部符号的。如果一个全局的负号在A文件中定义,想在B文件中使用,就可以使用extern进行声明再使用。