函数
1.函数的基本概念
函数就是把代码中功能相似并且独立的代码单独封装成一个独立的整体
(1)函数优点
提高代码的简介性,提高开发效率
提高代码的重要性
有利于系统的维护
(2)函数的分类
分类一:
系统函数
由c系统提供的函数;例如:printf()scanf()调用函数时,只需将其对应的头函数包含进来,即可
自定义函数
数学函数
pow(a,b) 计算a的b次方
用户根据自己需要自己定义函数 void空类型函数,无返回值
分类二:
有返回值:
函数调用结束后会返还一个值给主调函数
无返回值:
函数结束后,无返回值,一般定义为void类型,即空类型
分类三:
有参函数:
参数可以任意多个 实参---------->形参
无参函数:
函数的基本定义:
(1)无参函数的定义
DataType FunctionName()
{
//函数体
//可执行语句
}
函数名后面的括号不能省略!!!
(2)有参函数的定义
DataType FunctionName(Type arg1,Type arg2)<----参数列表
{
//函数体
}
注:
参数列表可以有多个,参数的类型可以任意(相对)!
(3)函数的定义,函数的声明以及函数的调用
函数的定义
函数名表示函数的入口地址
函数的声明:
DataType FunctionName(参数列表);
注:
声明时,参数列表一定要和定义时的参数列表一致!
后面的分号不可省
放在函数被调用之前
函数的调用:
FunctionName(value);
注:
函数调用时,实参值的类型,一定要和函数定义时的形参列表一致
函数调用可以在任何位置
实参:
实际参数,即具体的数值
形参:
形式参数,形参的定义和普通变量的定义并无区别
注:
函数名表示函数的入口地址
函数之间没有优先级问题,函数之间是等价的,即平行关系
形参在发生调用时分配空间
在发生函数调用时,系统自动把实参赋给形参,括号里的都是实参,实参没有数据类型
实参的个数、类型、数据列表都要一一对应
函数的返回值
无返回值的类型函数类型为:void
DataType FuncName(参数列表)
{
//函数体
}
DataType:决定了函数的返回值类型
若是int,则函数返回值为int型,
若为double,则返回值为double类型
如果函数的返回值能够在后面的程序中使用,则需要相同类型的变量接受
return的作用
(1)函数遇到return,则函数结束,后面的代码不再执行
(2)用于返回函数的值即执行结果
5.关键字
变量分为全局变量和局部变量
全局变量:
在函数体之外定义的变量
其作用于是从变量定义开始,一直到文本结束
在全局变量被定义之前不可以使用全局变量
局部变量
在函数内部被定义的变量
函数结束时,局部变量会自动消失!因此,不同函数中可以使用相同的变量名。
auto 声明变量为动态局部变量,可以省略,如:auto int a=4;
动态全局变量
作用域:
生命周期:
动态局部变量
变量每一次都自动初始化
static:
声明变量为静态变量
作用域:
从定义处开始,到文件结束
生命周期:
静态变量若定义是没有初始化,则系统默认初始化为0;
静态变量值初始化一次;
static只初始化一次
extern:
声明为外部变量:extern int sum;
修饰函数:extern int test();
声明变量或函数以在外部被定义
register
寄存器变量:变量直接存放在寄存器当中,cpu的寄存器个数有限,不可以定义多个寄存器变量,速度快
const
常量,不可更改其值
int const p 值不可更改
int const p 地址不可更改
函数的传参
值传递
传地址
指针函数和函数指针
指针函数:
int *test();
返回一个局部地址是不允许的
函数指针
函数名可以表示一个地址 指针的类型就是把指针变量名拿掉。