1、變量有哪些存儲類型?
變量的存儲類型由“存儲類型指明符”來說明。存儲類型指明符可以是下列類鍵字之一:
auto
register
extern
static
下面是詳細的解釋:
auto 存儲類指明符--用于說明具有局部作用域的變量,它表示變量具有局部(自動)生成期,但由于它是所有局部作用域變量說明的缺省存儲類指明符,所以使用得很少。要注意的是,所有在函數(shù)內(nèi)部定義的變量都是局部變量,函數(shù)內(nèi)部定義的變量其作用域只在函數(shù)內(nèi)部。它的生存期為該函數(shù)運行期間,一旦離開這個函數(shù)或這個函數(shù)終止,局部變量也隨之消失。
register 存儲類指明符--當聲明了這個指明符后,編譯程序將盡可能地為該變量分配CPU內(nèi)部的寄存器作為變量的存儲單元,以加快運行速度。注意,寄存器與存儲器是不同的。寄存器一般在CPU內(nèi)部,而存儲器一般指外部的(比如內(nèi)存條),CPU內(nèi)部的寄存器其運算速度是很高的。當寄存器已分配完畢,就自動地分配一個外部的內(nèi)存。它的作用等價于auto,也只能用于局部變量和函數(shù)的參量說明。 來源:www.examda.com
static 存儲類指明符--表示變量具有靜態(tài)生成期。static變量的的特點是它離開了其作用域后,其值不會消失。
當回到該作用域之后又可以繼續(xù)使用這個static變量的值。
例:利用static變量統(tǒng)計調(diào)用函數(shù)的次數(shù)
int two(); /*函數(shù)原型說明*/
void main()
{
int a=0;
a=two(); /*a的值等于1*/
a=two() /*a的值等于2*/
a=two(); /*a的值等于3*/
}
int two()
{
static int b=0; /*定義了一個局部的static變量*/
b++;
return b;
}
如果不是一個static變量就不會有這個效果了
int two(); /*函數(shù)原型說明*/
void main()
{
int a=0;
a=two(); /*a的值等于1*/
a=two() /*a的值等于1*/
a=two(); /*a的值等于1*/
}
int two()
{
int b=0;
b++;
return b;
}
變量a的值總是1,原因是在函數(shù)two()中,變量b不是一個static變量,其值隨著離開two函數(shù)就消失了,當回到two函數(shù)時又被重新賦值0。
變量的存儲類型由“存儲類型指明符”來說明。存儲類型指明符可以是下列類鍵字之一:
auto
register
extern
static
下面是詳細的解釋:
auto 存儲類指明符--用于說明具有局部作用域的變量,它表示變量具有局部(自動)生成期,但由于它是所有局部作用域變量說明的缺省存儲類指明符,所以使用得很少。要注意的是,所有在函數(shù)內(nèi)部定義的變量都是局部變量,函數(shù)內(nèi)部定義的變量其作用域只在函數(shù)內(nèi)部。它的生存期為該函數(shù)運行期間,一旦離開這個函數(shù)或這個函數(shù)終止,局部變量也隨之消失。
register 存儲類指明符--當聲明了這個指明符后,編譯程序將盡可能地為該變量分配CPU內(nèi)部的寄存器作為變量的存儲單元,以加快運行速度。注意,寄存器與存儲器是不同的。寄存器一般在CPU內(nèi)部,而存儲器一般指外部的(比如內(nèi)存條),CPU內(nèi)部的寄存器其運算速度是很高的。當寄存器已分配完畢,就自動地分配一個外部的內(nèi)存。它的作用等價于auto,也只能用于局部變量和函數(shù)的參量說明。 來源:www.examda.com
static 存儲類指明符--表示變量具有靜態(tài)生成期。static變量的的特點是它離開了其作用域后,其值不會消失。
當回到該作用域之后又可以繼續(xù)使用這個static變量的值。
例:利用static變量統(tǒng)計調(diào)用函數(shù)的次數(shù)
int two(); /*函數(shù)原型說明*/
void main()
{
int a=0;
a=two(); /*a的值等于1*/
a=two() /*a的值等于2*/
a=two(); /*a的值等于3*/
}
int two()
{
static int b=0; /*定義了一個局部的static變量*/
b++;
return b;
}
如果不是一個static變量就不會有這個效果了
int two(); /*函數(shù)原型說明*/
void main()
{
int a=0;
a=two(); /*a的值等于1*/
a=two() /*a的值等于1*/
a=two(); /*a的值等于1*/
}
int two()
{
int b=0;
b++;
return b;
}
變量a的值總是1,原因是在函數(shù)two()中,變量b不是一個static變量,其值隨著離開two函數(shù)就消失了,當回到two函數(shù)時又被重新賦值0。