iOS開發技能樹之C語言 儲存方式 類別

2021-08-19 18:39:08 字數 3119 閱讀 1196

c語言根據變數的生存週期來區分,分為靜態儲存方式和動態儲存方式。

在記憶體中的使用者儲存空間分為:程式區、靜態儲存區、動態儲存區。

c語言中的儲存類別分為四類:自動(auto)、靜待(static)、暫存器(register)、外部的(extern)。

1、auto 自動變數 –區域性變數

auto定義的變數為自動變數,auto可以省略,auto不寫則隱含定為「自動儲存類別」,屬於動態儲存方式。

函式的形參、在函式中定義的區域性變數(包含在符合語句中定義的區域性變數),都是自動變數auto。儲存在記憶體的動態儲存區中。

int funny (int a)
2、static 靜態變數
static修飾的是靜態變數,如果定義在函式內部,稱之為靜態區域性變數;如果定義在函式外部,稱之為靜態外部變數。

靜態變數都儲存於靜態儲存區。

1、靜態區域性變數在編譯時賦初值,第一次賦值有效,以後在呼叫時,直接使用上一次呼叫的值而不需要重新賦值。

2、靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元,在程式整個執行期間都不釋放。

3、如果在定義區域性變數時不賦初值的話,則靜態變數在編譯時自動賦初值0(對數值型變數)或空字元(對字元變數)。

void funny (int a) 

int main(int argc, const char * argv)

printf("********\n");

funny(0);

return0;}

列印結果:

funny :2

funny :3

funny :4

funny :5

funny :6

********

funny :7

全域性變數都是放在靜態儲存區中的。一般來說,外部變數是在函式外定義的全域性變數,它的作用域是從變數定義處開始,到本程式檔案末尾。

靜態外部變數,是為了使某些變數只限於被本檔案引用,而不能被其他檔案引用。

1、static int a,變數只可以在當前檔案中使用,

2、int a,只是全域性變數,可以在整個工程中使用,其他檔案引用時需要extern關鍵字宣告

test.c

static

int staticint_test = 100;

int pint_test = 200;

/*-----------------------*/

main.c

int main(int argc, const

char * argv)

static對區域性變數和全域性變數的作用不同,對區域性變臉來說它使變數由動態儲存方式改為靜態儲存方式。對全域性變數來說,它使變數區域性化(區域性於本檔案),但仍為靜態儲存方式。

從作用域角度看,凡有static宣告的,其作用域都是侷限的,或者都是侷限於本函式內(靜態區域性變數),或者侷限於本檔案內(靜態外部變數)。

3、register 暫存器變數

為提高效率,c語言允許將區域性變數的值放在cpu的暫存器中,這種變數叫「暫存器變數」,關鍵字register宣告。

void funny ()
只有區域性自動變數和形式引數可以作為暫存器變數;乙個計算機系統中的暫存器資料有限,不能定義任意多個暫存器變數,區域性靜態變數不能定義為暫存器變數

4、extern 外部變數

extern宣告的變數是外部變數,表示把該變數的作用域擴充套件到此位置。外部變數的含義是某函式可以呼叫在該函式之後定義的變數。也可以呼叫其他檔案中宣告的外部變數。

int main(int argc, const

char * argv)

int count = 100;

列印結果:

100/** 如果不作宣告,將報錯"use of undeclared identifier 'count'" **/

test.c

int pint_test = 200;

/*-----------------------*/

main.c

int main(int argc, const

char * argv)

—這部分說明來自部落格

程式的編譯單位是源程式檔案,乙個原文家可以包含乙個或若干個函式。在函式內定義的變數是區域性變數,在函式之外定義的變數稱為外部變數,外部變數是全域性變數(也稱全程變數)。

全域性變數可以為本檔案中其他函式所共用,他的有效範圍為從定義變數的位置到本原始檔結束。

建議不再必要時不要使用全域性變數:1、全域性變數在程式執行的全部過程中都占用儲存單元,而不是僅在需要時才開闢單元;2、使函式通用性降低;3、全域性變數過多,降低程式的清晰性,難以清晰判斷出每個瞬間各個外部變數的值。

乙個變數的屬性可以從兩個方面分析,乙個是作用域,乙個事變數值存在時間的長短,即生存期。前者是從空間角度,後者是從時間角度。二者有聯絡,但不是同一回事。

如果乙個變數在某個檔案或函式範圍內是有效的,就稱該範圍為該變數的作用域。在該作用域內可以引用該變數。

如果乙個變數值在某一時刻是存在的,則認為這一時刻屬於該變數的生存期,或稱該變數在此時刻存在。

1、從作用域角度分,有區域性變數和全域性變數

2、從變數存在的時間(生存期)區分,有動態儲存和靜態儲存兩種型別

3、從變數值儲存位置區分

iOS開發之資料儲存

xml屬性列表 plist 歸檔 preference 偏好設定 本質還是通過 plist 來儲存資料,但是使用更簡單 無需關注檔案 資料夾路徑和名稱 nskeyedarchiver歸檔 nscoding 把任何物件,直接儲存為檔案的方式。sqlite3 當非常大量的資料儲存時使用 core dat...

iOS開發之資料儲存之NSData

1 概述 使用archiverootobject tofile 方法可以將乙個物件直接寫入到乙個檔案中,但有時候可能想將多個物件寫入到同乙個檔案中,那麼就要使用nsdata來進行歸檔物件。nsdata可以為一些資料提供臨時儲存空間,以便隨後寫入檔案,或者存放從磁碟讀取的檔案內容。可以使用 nsmut...

iOS開發之資料儲存之NSData

1 概述 使用archiverootobject tofile 方法可以將乙個物件直接寫入到乙個檔案中,但有時候可能想將多個物件寫入到同乙個檔案中,那麼就要使用nsdata來進行歸檔物件。nsdata可以為一些資料提供臨時儲存空間,以便隨後寫入檔案,或者存放從磁碟讀取的檔案內容。可以使用 nsmut...