在一个函数中调用另一个函数,需要具备的条件如下:
1、首先被调用的函数必须是已经存在的函数(库函数或者用户自己定义的函数)
2、如果使用库函数,需要再本文件开头用#include命令调用有关函数库时所需要的信息包含到本文件中
3、如果使用用户自己定义的函数,而该函数的位置在调用他的函数的后面,应该在主调用幻术中对被调用的函数作声明
1 |
|
1 | 类型标识符 函数名() |
局部变量和全局变量
变量的存储类别
动态存储方式与静态存储方式
全局变量全部存放在静态存储区中,在程序开始执行的时候给全局变量分配存储区,程序执行完就释放,在程序执行过程中他们占据固定的存储单元,而不是动态得进行分配和释放
动态存储区中存放的数据有
1、函数形式参数,在调用函数时给形参分配空间
2、自动变量 为加staic生命的局部变量
3、函数调用时的现场保护和返回地址等
auto变量
函数中的局部变量,如果不专门生命为static存储类别,都是动态的分配存储空间,数据存储在动态存储区中。因此这类局部变量称为自动变量,用关键字auto作存储类别的声明
static声明局部变量
如果希望函数中的局部变量的值在函数调用后不消失而保留原值,使其占用的存储单元不释放,在下一次该函数调用时,该变量已优质,就是上一次函数调用结束时的值,这时就应指该局部变量为静态局部变量,用static进行声明1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void main()
{
int f(int);
int a=2,i;
for(i=0;i<3;i++)
{
printf("%d",f(a));
}
}
int f(int a)
{
auto int b=0;
staic int c = 3;
b = b+1;
c = c+1;
return(a+b+c);
}
register变量
1 | 寄存器变量 |
【注意】
- 只有局部自动变量和形式参数可以作为寄存器变量,其他不行,在调用一个函数时占用一些寄存器以存放寄存器变量的值,函数调用结束释放寄存器,此后,在调用另一个函数时又可以利用他来存放该函数的寄存器变量
- 一个计算机系统中的寄存器数目是有限的,不能定义任意多个寄存器变量
- 局部静态变量不能定义为寄存器变量,不能写成 register static int a,b,c,不能把变量a,b,c既存放在静态存储中又存放在寄存器中,二者只能居其一
用extrn声明外部变量
用static声明外部变量
关于变量的声明和定义
存储类别小结
内部函数和外部函数
内部函数
如果一个函数只能被文件中其他函数使用,成为内部函数用static声明1
static int fun(int a, int b)
外部函数
如果在函数前添加了extern表示此函数是外部函数,可供其他文件调用1
extrn int fun(int a, int b);