函数
- 实现某个功能多次多次调用
int array_max(int a[],int len) //array_max 函数名;a 需要操作的数组;len 数组长度
{
int i,max=a[0];
for(i=1;i<len;i++){
if(a[i]>max)
max=a[i];
}
return max;
}
- 鹅
定义
- 就是具有特殊功能的指令集合
- C程序从main()开始执行
- 从用户角度出发可分为:库函数和用户自定义的函数
- 库函数:由标准C库提供,用户不需要自己实现,在使用时直接调用即可,eg:printf、scanf
- 用户自定义:用户自己定义
- 语法
类型标识符 函数名(形参列表)
{
函数体
}
说明:
1.类型标识符:函数返回的数据类型,支持C语言所有的数据类型(无返回void)
2.函数名:用户自定义的标识符
3.形参列表:函数用来接受用户所传递的数据参数,参数可以是多个也可以是0个
4.函数体:实现函数功能的代码块
无参函数的定义
- 函数不需要接受用户传递的数据
类型标识符 函数名(){
函数体
}
注意:形参列表为空
- 如果函数不需要返回值,“类型标识符”可以设计位void
void func()
{
printf("hotpot!\n");
}
- rg
有参数的函数定义
- 根据实际需求
参数和返回值
- 形参和实参
- 形参出现在函数的定义中,在整个函数体中都可以访问到,离开就不可以
- 实参出现在函数调用
- 函数调用时,将实参值赋值给形参
- 特点:
- 形参被调用时才会被分配空间(没有调用不会分配空间)
- 实参可以是常量、变量、表达式、函数名
- 函数栈:系统自动分配和回收
局部变量和全局变量
- 局部变量
- 定义在{}内的变量(函数内不对,作用域:{}内)
#include <stdio.h>
int max1(int a, int b) // 形参列表
{
int c = 10; // 局部变量
{
int c; // 内部作用域的c,覆盖外部的c
c = 100;
printf("内部c: %d\n", c); // 缺少的参数c添加进来
}
printf("外部c: %d\n", c); // 缺少的参数c添加进来
return a > b ? a : b;
}
int main() {
max1(10, 11);
return 0;
}
2.
3.
- 全局变量
- 函数外;可以在整个程序被访问
- 全局变量初始化值为0
- 局部变量如果和全局变量重名,会覆盖全局变量(在本函数内)
嵌套
- 嵌套调用
- 名字(数字字母_组成;数字不能为首位)
- 名字(形参列表)
- 返回值(无:viod;有:类型(int float))
- 某个函数调用另外一个函数
- 2
void b(){
printf("b\n");
}
void a(){
printf("a\n");
b();
printf("a over\n");
}
int main(){
a();
return 0;
}
2. <img src="https://cdn.nlark.com/yuque/0/2025/png/45578875/1753606815514-64eddc31-f8e3-4aaa-a79d-39bdf3665df6.png" width="352.5" title="" crop="0,0,1,1" id="u866663af" class="ne-image">
-
声明
- 语法
函数类型 函数名(形参列表);
注意:
1.后面有分号;
2.函数声明时,函数类型(返回值类型)必须与函数实现一致,函数名必须和函数实现时一致
3.形参列表中,可以不填写形参变量的名字,只需要填写形参的类型即可,如:
int fun(int,float);
递归函数:及时终止
- 定义
- 一个函数在自己的函数体内调用自身称为递归调用
- 例子
void func(){
func();
}
- 使用
- 什么时候使用
- 某个功能与本函数一样
- 递归调用是这种模式,出现什么
- 示例
long long fact(int n){
if(n ==1)
return;
return n*fact(n-1);
}