深入理解C++中变量的存储类别和属性

2020-01-06 13:47:29王冬梅

运行结果为

 

 
  1. 1!=1  2!=2 
  2. 3!=6  4!=24 
  3. 5!=120 

每次调用fac(i),就输出一个i,同时保留这个i!的值,以便下次再乘(i+1)。

2) 如果初始化后,变量只被引用而不改变其值,则这时用静态局部变量比较方便,以免每次调用时重新赋值。 但是应该看到,用静态存储要多占内存,而且降低了程序的可读性,当调用次数多时往往弄不清静态局部变量的当前值是什么。因此,如不必要,不要多用静态局部变量。

用register声明寄存器变量

一般情况下,变量的值是存放在内存中的。当程序中用到哪一个变量的值时,由控制器发出指令将内存中该变量的值送到CPU中的运算器。经过运算器进行运算,如果需要存数,再从运算器将数据送到内存存放。如图所示。

深入理解C++中变量的存储类别和属性

为提高执行效率,C++允许将局部变量的值放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取。这种变量叫做寄存器变量,用关键字register作声明。例如,可以将例4.14中的fac函数改写如下:

 

 
  1. int fac(int n)  { 
  2. register int i,f=1; //定义i和f是寄存器变量  for(i=1;i<=n;i++) f=f*i; 
  3. return f;  }