3、資料
具有external鏈結屬性的實體在其他語言的術語裡稱為全域性(global)實體,所有原始檔中的所有函式均可以訪問他。只要變數並非宣告於**塊或函式定義內部,它在預設情況下的鏈結屬性即為external。如果乙個變數宣告於**塊內部,在它前面新增extern關鍵字將使它所引用的是全域性變數而非區域性變數。
具有external鏈結屬性的實體總是具有靜態儲存型別。全域性變數在程式開始執行前建立,並在程式整個執行過程中始終存在。從屬於函式的區域性變數在函式開始執行時建立,在函式執行完畢後銷毀,但用於執行函式的機器指令在程式的生命期內一直存在。
區域性變數由函式內部使用,不能被其他函式通過名字引用。它在預設情況下的儲存型別為自動,這是基於兩個原因:其一,當這些變數需要時才為它們分配儲存,這樣可以減少記憶體的總需求量。其二,在堆疊上為他們分配儲存可以有效地實現遞迴。如果你覺得讓變數的值在函式的多次呼叫中始終保持原先的值非常重要的話,你可以修改它的儲存型別,把它從自動變數改為靜態變數。總結如下:
作用域、鏈結屬性和儲存型別總結
變數型別
宣告的位置
是否存於堆疊
作用域如果宣告為static
全域性所有**塊之外
否1
從宣告處到檔案尾
不允許從其他原始檔訪問
區域性**塊起始處
是2
整個**塊3
變數不儲存於堆疊中,它的值在程式整個執行期一直儲存
形式引數
函式頭部
是2
整個函式3
不允許*1、儲存於堆疊的變數只有當該**塊處於活動期間,他們才能保持自己的值。當程式的執行流離開該**塊時,這些變數的值將丟失。
*2、並非儲存於堆疊的變數在程式開始執行時建立,並在整個程式執行期間一直保持他們的值,不管他們是全域性還是區域性變數。
*3、有乙個例外,就是在巢狀的**塊中分別宣告了相同名字的變數。
為了保持最佳的可移植性,把字元的值限制在有符號和無符號字元範圍的交集之內,或者不要在字元上執行算術運算。在定義型別的新名字時,使用typedef而不是#define。用const宣告其值不會修改的變數。除了實體的具體定義位置之外,在它的其他宣告位置都使用extern關鍵字。
4、語句
當迴圈內部執行break語句時,迴圈就會退出。當迴圈內部執行continue語句時,迴圈體的剩餘部分便被跳過,立即開始下一次迴圈。在while和do迴圈中,下一次迴圈開始的位置是表示式測試部分。但在for迴圈中,下一次迴圈開始的位置是調整部分。 在每個switch語句中都使用default子句。
C和指標之IO總結
io操作就是簡單的從程式移進或移出位元組的事情,這種位元組流便稱為流 1 文字流 文字流是指在流中流動的資料是以字元形式出現 2 二進位製流 二進位製流是指流動的是二進位制數字序列,若流只有字元,則用乙個位元組的二進位制ascii碼表示,若是數字,則用對應的二進位制數表示。在流入流出時,對 n符號不...
《c和指標》之總結 四
6 指標 計算機記憶體中的每個位置都由乙個位址標識。通常,鄰近的記憶體位置合成一組,這樣就允許儲存更大範圍的值。指標就是它的值表示記憶體位址變數。無論是程式設計師還是計算機都無法通過值的位模式來判斷它的型別。型別是通過值的使用方法隱式地確定的。編譯器能夠保證值的宣告和值的使用之間的關係是適當的,從而...
《c和指標》之總結 三
5 操作符和表示式 操作符優先順序 操作符 描述 用法示例 結果型別 結合型 是否控制求值順序 聚組 表示式 與表示式同 n a否 函式呼叫 rexp rexp,rexp l r否 下標引用 rexp rexp lexp l r否 訪問結構體成員 lexp.member name lexp l r否...