android 可以用静态变量当 临时缓存使用吗 静态变量存储在_静态变量存储在哪个区


android 可以用静态变量当 临时缓存使用吗 静态变量存储在_寄存器_02


变量的存储类型

存储类型是变量的属性之一,C++定义了4种变量的存储类型:auto变量、static变量、register变量、extern变量。

  1. 变量存储方式不同会使变量的生存期不同,生存期表示了变量存在的时间。生存期和变量作用域是从时间和空间这两个不同的角度来描述变量的特性。
  2. 静态存储变量通常是在变量定义时就分配固定的存储单元并一直保持不变,直至整个程序结束。
  3. 如全局变量,他们存放在静态存储区中。
  4. 动态存储变量是在程序执行过程中使用它时才分配存储单元,使用完毕立即将该存储单元释放。例:形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时才予以分配的,调用函数完毕立即释放,此类变量存放在动态存储区中。

即:

静态存储变量是一直存在的,动态存储变量则时而存在时而消失。


android 可以用静态变量当 临时缓存使用吗 静态变量存储在_全局变量_03


1.auto变量

函数内未加存储类型说明的变量均视为自动变量,可省去关键字auto。

{int i ,j ,k ;auto int i,j,k ; //等价的。}

特点:

  1. 自动变量的作用域仅限定于定义该变量的个体内。在函数中定义的自动变量,只有在该函数内有效;在复合语句中定义的自动变量,只在该复合语句中有效。
  2. 自动变量属于动态存储方式。变量分配的内存是在栈中,当函数调用结束后,自动变量的值会被释放。同样,在复合语句中定义的自动变量,在退出复合语句后也不能再使用,否则将引起错误。
  3. 由于自动变量的作用域和生存期都局限于定义它的个体内(函数或复合语句内),因此不同的个体中允许使用同名的变量而不会混淆。即使在函数内定义的自动变量也可以与该函数内部的复合语句中定义的自动变量同名。


android 可以用静态变量当 临时缓存使用吗 静态变量存储在_全局变量_04


实例: 输出不同生存期的变量值。

#includeusing namespace std;void main(){auto int i,j,k;cout <>i>>j;k=i+j;if(i!=0&& j!=0){auto int k;k=i-j;cout<

结果为:


android 可以用静态变量当 临时缓存使用吗 静态变量存储在_全局变量_05


注:


可能会出现两个类型说明符组合无效的问题,这时把 auto 隐去即可。


android 可以用静态变量当 临时缓存使用吗 静态变量存储在_静态变量存储在哪个区_06


2.static变量


在声明变量时加关键字static,可以将变量声明为静态变量。静态局部变量的值在函数调用结束后不消失,静态全局变量只能在本源文件中使用。


static int a,b ;static float x,y;static int a[3] ={0,1,2};


静态变量属于静态存储方式。


android 可以用静态变量当 临时缓存使用吗 静态变量存储在_源文件_07


特点:

静态变量在函数内定义,在程序退出时释放,在程序整个运行期间都不释放,也就是说他的生存期为整个源程序。静态变量的作用域与自动变量相同,在函数内定义就在函数内使用,尽管该变量还继续存在,但不能使用它,如再次调用定义它的函数,他又可以继续使用。编译器会为静态局部变量赋予0值。

实例:使用static变量实现累加。


#includeusing namespace std ;int add(int x) {static int n=0; //静态变量n=n+x;return n;}void main(){int i ,j ,sum;cout<>i;cout << "the result is :"<

结果为:


android 可以用静态变量当 临时缓存使用吗 静态变量存储在_静态变量存储在哪个区_08


3.register变量


通常变量的值存放在内存中,当对一个变量频繁读写时,需要反复访问内存存储器,此时将花费大量的存取时间。为了提高效率,C++语言可以将变量声明为寄存器变量,这种变量僵局不变来那个的值存放在CPU中的寄存器中,使用时不需要访问内存,而直接从寄存器中读写。寄存器变量的声明符是register。


android 可以用静态变量当 临时缓存使用吗 静态变量存储在_全局变量_09


注:

寄存器变量属于动态存储方式。凡是需要采用静态存储方式的变量不能定义为寄存器变量。编译程序会自动决定哪个变量使用寄存器存储。register可以起到程序优化的作用。

android 可以用静态变量当 临时缓存使用吗 静态变量存储在_寄存器_10


4.extern变量


在一个源文件中定义的变量和函数只能被本源文件中的函数调用,一个C++程序中会有许多源文件,可用extern变量使用非本源文件中的全局变量。


C++提供了extern 关键字来解决这个问题。在使用其他源文件中的全局变量时,只需要在本源文件中使用extern关键字来声明这个变量即可。


实例:在app.cpp源文件中定义全局变量a、b、c代码如下:


int a , b; //外部变量定义char c ; // 外部变量定义void main(){cout <

在app2.cpp源文件中要使用app.cpp中的全局变量 abc,代码如下:


extern int a,b;//外部变量说明extern char c;//外部变量说明func(int x,y){cout<

注:


在app2.cpp源文件中,编译系统不再为全局变量a、b、c分配内存空间,而是改变全局变量a、b、c的值,在app2.cpp源文件中输出值也会发生变化。


android 可以用静态变量当 临时缓存使用吗 静态变量存储在_全局变量_11