這指的是資料類型,就是變數的類型,而變數是用來存資料的


基本上 C 語言有四個主要的基本類型   char, int, float, double。char 有一個byte, 常用來存放一個ASCII字元,int  則是四個byte的整數,包括一個正負號,所以範圍是,正負2的32次方,也就是大約正負20億左右,float 用來放浮點數,double 是用來存放更精確的整數。另外還有unsinged int, long , long long 等各種型別,用來存放【字元】【整數】【正整數】【浮點數】(不同精度的)等資料。(請參閱子章節【C資料類型資料參考】)(註:在 Obj-C 中,我們經常會使用更多的資料類型,以加速開發的時間,如 NSString 的字串類型等)
 

不過這一節的重點,並不是認識不同的資料,而是了解一下變數的本質

例:

        int x;
        x=100;
        NSLog(@" x=%i",x);
 

對我們來說是建立了一個變數,變數的名稱叫做 x,而內容放入了 100, 最後將它輸出

而其中我們更該注意的是,int 使用了 4 個byte 也就是電腦保留了 4 個 byte, 而把100 這個數字,轉成對應格式的 4 byte 資料,放到這 4 byte中。不管你存 100 還是 10,00,000 它都是存在這 4 個byte 中,向電腦要了記憶體保留,也有保留位置是在那兒的相關資訊。

           宣告變數,就是向系統要求保留記憶體空間的程序
 
宣告不同的型式的變數,所佔的空間大小也不一樣如 char 為 1 byte, double 為 8 byte等。

另外還有一種情形是宣告時會有兩個空間會保留,一個是保留來存的記憶體實際位置的空間,另外一個就是存放資料實際資料,這種情形叫指標變數,在C語言中常用於陣列或結構體,但在Objective-C中,幾乎都是指標變數。

即然宣告變數就是向系統要求保留記憶體位置,那要保留到什麼時候呢?這就要看變數宣告的位置了。

變數可以宣告在 main() 之前, 稱為全域變數,全域變數的生命周期是靜態分配的的,也就是說,它會保留到程式結束為止,而大多數變數的宣告都會寫在程式中的變數都寫在 function 中,這時記憶體會保留到 Satck 結束為止,一個簡單判別方法就是到 { }區斷結束為止。

請看以下範例:(請注意看最左方行號旁有一個灰色的色條,其顏色變化的意義)


這個程式的輸出為


我們在第 11 行建立了一個全域變數,值為100,執行到 16 行時已進入了main()的 stack,做第一次輸出,但尚未宣告main()的stack 變數i, 所以 i 的值為 100, 到了第 18行時,已做宣告,所以 i 的值為 200,到第21行時輸出的是 if(TRUE)的 stack 內的變數 i 為 300,23行時,因已離開 if 的 stack 所以輸出 main() 的 stack 中的 i 值為 200,最後呼叫 print_i() function ,對其他 function 來說,只能讀到全域變數 i ,值為 100。
arrow
arrow

    shenfive 發表在 痞客邦 留言(0) 人氣()