iOS開發篇——C++變量屬性介紹

藍鷗iOS培訓講師推薦:在技術的領域裏沒有懶這麼一說,沒有學不會這麼一說,只要你自己努力就沒什麼太大問題。

變量除了數據類型以外,還有3種屬性:

1、存儲類別 C++允許使用auto,static,register和extern 4種存儲類別

2、作用域 指程序中可以引用該變量的區域

3、存儲期 指變量在內存的存儲期限

上面這介紹的這些3種屬性是有關係的,程序設計者只能聲明變量的存儲類別,通過存儲類別可以確定變量的作用域和存儲期

但是大家一定要注意存儲類別的用法auto, static和register 3種存儲類別只能用於變量的定義語句中,如:

auto char c; //字符型自動變量,在函數內定義

static int a;//靜態局部整型變量或靜態外部整型變量

register int d; //整型寄存器變量,在函數內定義

extern int b;//聲明一個已定義的外部整型變量

重點說明: extern只能用來聲明已定義的外部變量,而不能用於變量定義,只要看到extern,就能夠判斷變量聲明,而不是定義變量語句。

下面是不同角度的分析:

1、從作用域角度分,有局部變量和全局變量,它們採用的存儲類別如下:

1)局部變量

自動變量,即動態局部變量(離開函數,值就消失)

靜態局部變量(離開函數,值仍保留)

寄存器變量(離開函數,值就消失)

形式參數(可以定義爲自動變量或寄存器變量)

2)全局變量

靜態外部變量(只限本文件引用)

外部變量(即非靜態的外部變量,允許其他文件引用)

2、從變量存儲期(存在的時間)來區分,有動態存儲和靜態存儲兩種類型,靜態存儲是程序整個運行時間都存在,而動態存儲則是在調用函數時臨時分配單元。

1)動態存儲

自動變量(本函數內有效)

寄存器變量(本函數內有效)

形式參數

2)靜態存儲

靜態局部變量(函數內有效)

靜態外部變量(本文件內有效)

外部變量(其他文件可引用)

3、從變量值存放的位置。可分爲

1)內存中靜態存儲區

靜態局部變量

靜態外部變量(函數外部靜態變量)

外部變量(可爲其他文件引用)

2)內存中動態存儲區:  自動變量和形式參數

3)CPU 中的寄存器: 寄存器變量

4、關於作用域和存儲期的概念,從前面敘述可以知道,對一個變量的性質可以從兩個方面分析,一是從變量的作用域,一是從變量值存在時間的長短,即存儲期,前者是從空間的角度,後者是從時間的角度,二者有關係,但是有不同的意義,如下圖:

 143354119.jpg

作用域的示意圖

 143405509.jpg

存儲期的示意圖

如果一個變量在某個文件或函數範圍內是有效的,那麼這個文件或函數稱爲該變量的作用域,在該作用域內能夠引用該變量的,所以又稱變量在此作用域內“可見”,這種性質又稱爲變量的可見性,在“作用域的示意圖”中變量a、b在函數f1中能看到。

如果一個變量值在某一時刻是存在的,那麼就認爲這一時刻屬於該變量的存儲期,或稱該變量在此時刻“存在”

可以看到自動變量和寄存器變量在函數內的可見性和存在性是一致的,在函數外的可見性和存在性也是一致的,靜態局部變量在函數外的可見性和存在性不一致,靜態外部變量和外部變量的可見性和存在性是一致的。

5、static聲明使變量採用靜態存儲方式,不過它對全局變量和局部變量有不同的作用,對局部變量而言,staic使動態存儲方式改爲靜態存儲方式,而對於全局變量而言,它又使變量局部化(局部於本文件),不過仍是靜態存儲方式,從作用域角度而言,只要是有static聲明的,那麼它的作用域都是侷限的,可能只侷限於本函數內(靜態局部變量),也有可能侷限於本文件內(靜態外部變量)

本節課和大家說的有點多,不過理解起來應該不是很複雜,大家可以試着先理解一下,整理出來一個思路,如果有不懂的地方可隨時溝通!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章