1,概念
函数是对一段实现某个功能的代码块的封装。
2,函数的作用
1》避免写重复的代码
2》使程序模块化
3》有利于程序的维护和升级
3,函数的定义(实现)
格式:
返回值类型 函数名(参数列表) //函数头
{
要封装的代码块 //函数体
}
例如:
//函数的定义
void fun(void) //函数头,void空类型,作为函数的返回值类型,表示该函数没有返回值,如果参数列表为void表示该函数没有参数
{ //函数体
printf("大家好\n");
printf("我是小猿\n");
printf("今天写了第一个函数\n");
}
4,函数的使用(调用)和声明
1》函数的调用
格式:
函数名(); 或 函数名(参数列表);
例如:
fun(); //函数调用
fun(a,b); //函数的调用
2》函数的声明
为什么要声明?
当被调用函数在调用函数的后面定义时,需要在调用之前先声明
怎么声明?
声明函数的格式: 函数头+;
#include <stdio.h>
void fun(int a,int b); //函数的声明
int main(void)
{
int a,b;
printf("请输入a和b:");
scanf("%d%d",&a,&b);
fun(a,b); //函数的调用
return 0;
}
//函数的定义
void fun(int a,int b)
{
int max;
max = a > b ? a : b;
printf("max = %d\n",max);
}
5,函数传参
1》函数的形参和实参
形参:形式参数
在函数头中定义的变量,成为函数的形式参数,简称形参。
形参必须是变量
形参由实参初始化
实参:实际参数
在函数调用语句中传递的参数,成为实际参数,简称实参。
实参可以是变量,常量,表达式,指针等
例如:
fun(a,b); //函数的调用
fun(a+3,b-2);
fun(12,45);
2》函数的传参方式
值传递:
形参类型和实参类型相同
在被调用函数中,不能修改实参的值(不能给实参赋值)
地址传递:
形参类型是实参类型的对应的指针类型
在被调用函数中,可以修改实参的值(给实参赋值)
例如:
void fun01(int x,int y) //在该函数中不能修改实参,只能使用实参
{
printf("%d,%d\n",x,y);
x = 100;
y = 200;
}
void fun02(int* x,int* y) //在该函数中,可以修改实参的值
{
*x = 120;
*y = 340;
}
int main(void)
{
int a,b;
printf("请输入a和b:");
scanf("%d%d",&a,&b);
fun01(a,b); //值传递
fun02(&a,&b); //地址传递
printf("a = %d\n",a);
printf("b = %d\n",b);
return 0;
}
6,函数的返回值
int fun(int a,int b)
{
int sum;
sum = a + b;
return sum;
}
int main(void)
{
int a,b;
int sum;
printf("请输入a和b:");
scanf("%d%d",&a,&b);
sum = fun(a,b); //将hanshufun的返回值保存到sum中
printf("sum = %d\n",sum);
printf("sum = %d\n",fun(a,b)); //将函数fun的返回值直接打印到屏幕
return 0;
}
7,return语句的用法
1》在main函数中使用
表示结束程序,返回到系统中
例如:
int main(void)
{
printf("我是张三\n");
printf("来自火星\n");
return 0; //结束程序,返回系统
printf("今天学了return的使用\n");
return 0;
}
2》在其他函数中使用
表示结束当前函数的执行,返回到调用该函数的位置
例如:
//函数的定义
void fun(void)
{
printf("张三\n");
printf("今天\n");
return ; //结束当前函数,返回到调用该函数与的位置
printf("成为了C语言大佬\n");
}
int main(void)
{
fun(); //函数调用
printf("我是主函数\n");
return 0;
}