函数
优点
1,降低代码耦合度
2,提高代码复用率
3,降低代码冗余度
4,提高代码可读性
思想
封装(包装)
声明(背诵)
语法:
extern 函数名(形参列表)
;
注意
;
此时形参列表中变量名可以忽略不写
定义(背诵)
语法:
返回值类型 函数名(形参列表)
{
函数体
}
返回值类型
:返回值的数据类型,如果没有返回值写void(NULL空)
函数名
:标识符
形参列表
:定义的多个变量,使用逗号隔开,可有可无
函数体
:封装的代码
return
:结束当前函数
return 值或变量
;结束当前函数并返回该值或变量,此时这个值或变量就是返
回值
一个函数只能有一个返回值
定义位置:函数外
注意:
同一个程序中不能出现两个或两个一个函数名相同的函数
调用(背诵)
语法:
通用
函数名(实参列表);
调用有返回值的
变量名 = 函数名(实参列表);
注意:
实参列表要与形参列表一致(长度一致,顺序一致,数据类型一致)
调用位置:函数中
定义与调用的关系
先定义,后调用
定义只需一次,但是可以调用无数次
分类
系统调用:
可以直接操作内核的函数,成为系统调用
库函数:
有系统提供的函数称为库函数,printf,scanf,rand
自定义:
自己定义的函数
分布学习
1,自定义无参无返回值的函数并调用
定义一个函数计算
5
的阶乘
void jc()
{
int num = 1;
for(int i = 1; i <= 5; i++)
{
num = num * i;
}
printf("5的阶乘结果为:%d\n",num);
}
jc();
2,自定义有参无返回值的函数并调用
定义一个函数计算指定的数的阶乘
void jc02(int x)
{
int num = 1;
for(int i = 1; i <= x; i++)
{
num = num * i;
}
printf("%d的阶乘结果为:%d\n",x,num);
}
jc02(3);
int a = 5;
jc02(a);
3,自定义无参有返回值的函数并调用
定义一个函数生成一个大写字母
,
返回给外边使用
char getChar()
{
int x = rand() % 26 + 65;
char c = (char) x;
return c;
}
getChar();
char c2 = getChar();
4,自定义有参有返回值的函数并调用
int jc03(int x)
{
int num = 1;
for(int i = 0; i <= x; i++)
{
num = num * i;
}
return num;
}
jc03(3);
int x = jc03(3)
;
特殊情况(掌握)
1,多重调用
函数A中调用函数B,函数B中调用函数C,...
2,递归
函数本身调用本身
多文件编辑(掌握)
gcc 要编译的所有的源文件名 -o 生成的可执行文件名
注意
:
多个源文件之间使用空格隔开
无需编译头文件
头文件:
对应的源文件的声明文件
头文件名与源文件名一致
,
以
.h
结尾
头文件中可以书写
C
语言代码
头文件展开
"":
现在当前目录下寻找
,
如果没有再去系统路径下寻找
<>:
直接去系统路径下寻找
变量存储(背诵)
局部变量
定义位置:函数中
定义语法:数据类型 变量名;
默认值:随机数
存储区域:栈中
作用域:局部变量所定义的代码块中可用,同一个作用域下变量名不能相同
生命周期:随着所在函数的调用而生成,随着所在函数执行完毕后销毁
全局变量
定义位置:函数外
定义语法:数据类型 变量名;
默认值:0
存储区域:全局区
作用域:当前程序中
生命周期:随着所在程序的启动而生成,随着所在程序的执行完毕而销毁
静态局部变量
定义位置:函数中
定义语法:static 数据类型 变量名;
默认值:0
存储区域:全局区
作用域:当前代码块中
生命周期:随着所在的函数的第一次调用而生成,随着所在程序的执行而销毁
静态全局变量
定义位置:函数外
定义语法:static 数据类型 变量名;
默认值:0
存储区域:全局中
作用域:当前文件中
生命周期:随着所在程序的启动而生成,随着所在程序执行完毕后销毁
const修饰的变量
特点:只能赋值一次,称为常量
语法:
const 数据类型 变量名 = 值;
变量名
=
值
;//
错了
,
不能在此赋值
变量名
//
可以使用
全局函数与静态函数(背诵)
全局函数
普通的函数
可以在当前程序中任何一处使用
语法:
返回值类型 函数名(形参列表)
{
函数体
}
静态函数
使用
static
修饰的全局函数
只能在当前文件中使用
语法:
static 返回值类型 函数名(形参列表)
{
函数体
}