丛变量的作用于来看变量可以分为局部变量和全局变量
变量有两种储存方式 静态存储方式 和动态存储方式.
静态储存方式是指在程序运行期间有由系统分配固定的储存空间方式 ;动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式
内存中供用户使用的存储空间分为程序区,静态存储区和动态存储区
在动态存储区中存放一下数据
1 函数形式参数。在调用函数时给形参分配存储空间
2 函数重定义的没有用关键字static声明的变量,即自动变量
3 函数调用时的现场保护和返回地址
在c语言中每个变量和函数都会有两个属性:数据类型(浮点型整形之类)和数据存储类别(静态存储和动态存储)
C语言存储类别包括4种:自动的(auto),静态的(static),寄存器的(register),外部的(extern),不同变量的存储类别,变量的作用域和生存期不同
函数分为内部函数和外部函数
内部函数只能被本文件中其他函数所调用;而外部函数可供其他文件调用
自动变量(动态局部变量)
函数中的局部变量 :一般不专门声明静态 存储类别,都是动态的分配存储空间的,数据存储在动态存储区中
一般函数中的形参和在函数中定义的局部变量都属于自动变量
调用该函数时,系统给这些变量分配存储空间,函数调用结束时自动释放这些存储空间
int a,b=3; 等价于 auto int a,b=3;
静态局部变量
简单来说在函数调用结束时,保留该局部变量变量的值,其存储空间不释放,下次调用该函数时该变量已有值
#include<stdio.h>
int main()
{
int abc(int a);
int b=2,c;
for(c=1;c<4;c++)
{
printf("%d\n",abc(b));
}
getchar();
getchar();
return 0;
}
int abc(int a)
{
auto int d=0;
static e=3;
d=d+1;
e=e+1;
return (a+d+e);
}
每次调用d,d为1调用结束d为0;每次调用e,e=e+1.而不是3
寄存器变量
在程序中当某些变量需要频繁使用时,为存取变量减少时间,提高效率,将局部变量的值放在CPU的寄存器中,不在从内存中存取。这种变量叫做寄存器变量。
register int f //定义f为寄存器变量
全局变量
全局变量是存放在静态存储区。他们的生存期时固定的。
一般来说外部变量是在函数外部定义的全局变量。
1 在一个文件内扩展外部变量的作用域。
#include<stdio.h>
int main()
{
extern int a,b,c;
}
int a,b,c;
int abc(int i)
{
…
}
2将外部变量的作用域扩展到其他文件
文件1
#include<stdio.h>
int A;
int main()
{
…
}
文件2
extern A;
int abc(int a,int b)
{
int c;
c=a+b;
return ©;
}
3将外部变量的作用域限制在本文件中
文件1
static int a;
int main()
{
…
}
文件2
extern a;
int abc(int i)
{
…
}
像这样在全局变量用static声明,该变量就不能被使用于其他文件,也就是该全局变量的作用域是本文件