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