一、函数
1.函数的基本概念
函数是把代码中功能相似并且独立的代码单独封装成一个独立的整体;
-
函数优点
提高代码的简洁性,提高开发效率 提高代码的重用性 有利于程序的维护
-
函数的分类
分类一:
系统函数:
由C系统提供的函数;如:printf(),scanf(),gets(),puts()
调用系统函数时,只需将其对应的头文件包含进来,即可
example:
#include<stdio.h> -----> printf("hello!");pow(a,b);------->计算a的b次方 自定义函数: 用户根据需要自己定义的函数; 分类二: 有返回值函数: 函数调用结束后,会返回一个数值给主调函数; 无返回值函数: 函数结束后,无返回值,一般定义为void类型,即空类型 分类三: 有参函数: 参数可以任意多个 无参函数:
2.函数的基本定义:
无参函数的定义
DataType FunctionName()
{
//函数体
//可执行语句
}
注:函数名后的括号不可以省略!!!!!!有参函数的定义
DataType FunctionName(参数列表)
{
//函数体
}
注: 参数列表可以有多个,参数的类型可以任意(相对)!-
函数的定义,函数的声明以及函数的调用
函数的定义:
DataType FunctionName(参数列表)
{
//函数体
}
函数的声明:
DataType FunctionName(参数列表);
注:
声明时,参数列表一定要和定义时的参数列表一致!!!!!!!
后面的分号不可省略!!!
放在函数被调用之前的任意位置!!!!!!函数的调用:
FunctionName(value);
value:数值
注:
函数调用时,实参值的类型,一定要和函数定义是的形参列表一致!!!
函数调用可以在任何位置;实参:
实际参数,即具体的数值.
函数调用时的参数都是实参
形参:
形式参数,形参的定义和普通变量的定义无区别!
函数定义以及声明时的参数列表都是形参注:
函数名表示函数的入口地址.
函数之间没有优先级问题,函数之间是等价的.即平行关系!!!
形参在发生调用时分配空间!!!
在发生函数调用时,系统会默认将实参值赋给形参!!!
3.函数的返回值
无返回值的类型函数类型为:void
DataType FuncName(参数列表)
{
//函数体
}
DataType:决定了函数的返回值类型,
若是int,则函数返回值为int型,
若为double,则返回值为double类型
如果函数的返回值能够在后面的程序中使用,则需要相同类型的
变量接收返回值
若是void类型的函数,则无返回值,return可有可无!!!!!
若函数不是void类型,则必须要有return!!!!
4.return的作用:
* 函数遇到return,则函数结束,后面的代码不在执行
* 用于返回函数的值即执行结果
5.关键字
变量分为全局变量和局部变量
全局变量:
在函数体之外定义的变量,
其作用域是从变量定义处开始,一直到本文件结束!!!!!
在全局变量定义之前不可使用全局变量!
局部变量:
在函数中定义的变量,其作用域是整个函数!
函数结束时,局部变量会自动消亡!因此,不同的函数中
可以使用相同的变量名.
若全局变量和局部变量重名,则全局变量对局部变量不可见!!!
即屏蔽全局变量.
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)();