C語言拾遺 static

2022-02-17 14:42:58 字數 965 閱讀 1829

c程式一直由下列部分組成:

正文段——cpu執行的機器指令部分;乙個程式只有乙個副本;唯讀,防止程式由於意外事故而修改自身指令;

初始化資料段(資料段)——在程式中所有賦了初值的全域性變數,存放在這裡。

非初始化資料段(bss段)——在程式中沒有初始化的全域性變數;核心將此段初始化為0。

棧——增長方向:自頂向下增長;自動變數以及每次函式呼叫時所需要儲存的資訊,即儲存現場(返回位址;環境資訊)。

堆——動態儲存分。

static關鍵字的作用:

1. 全域性靜態變數

在全域性變數之前加上關鍵字static,全域性變數就被定義成為乙個全域性靜態變數。

1).記憶體中的位置:靜態儲存區(靜態儲存區在整個程式執行期間都存在)

2).初始化:未經初始化的全域性靜態變數會被程式自動初始化為0(自動物件的值是任意的,除非他被顯示初始化)

3).作用域:全域性靜態變數在宣告他的檔案之外是不可見的(即使新增了關鍵字extern)。準確地講從定義之處開始到檔案結尾

定義全域性靜態變數的好處:

<1>不會被其他檔案所訪問,修改

<2>其他檔案中可以使用相同名字的變數,不會發生衝突。

2. 區域性靜態變數

在區域性變數之前加上關鍵字static,區域性變數就被定義成為乙個區域性靜態變數。

記憶體中的位置:靜態儲存區

初始化:未經初始化的全域性靜態變數會被程式自動初始化為0(自動物件的值是任意的,除非他被顯示初始化)

作用域:作用域仍為區域性作用域,當定義它的函式或者語句塊結束的時候,作用域隨之結束。

【注】:當static用來修飾區域性變數的時候,它就改變了區域性變數的儲存位置,從原來的棧中存放改為靜態儲存區。但是區域性靜態變數在離開作用域之後,並沒有被銷毀,而是仍然駐留在記憶體當中,直到程式結束,只不過我們不能再對他進行訪問。

3.static函式(也叫內部函式)

只能被本檔案中的函式呼叫,而不能被同一程式其它檔案中的函式呼叫

C語言拾遺

main函式引數 c語言規定main函式引數只能有兩個,習慣上這兩個引數寫成argc和argv。c語言還規定argc必須是整形變數,argv必須是指向字串的指標陣列。因此,main函式的函式頭應該寫為 main argc,argv int argc char argv 或者 main int arg...

C語言拾遺

保證某些全域性變數的常量性 c c 中不能通過變數來定義陣列 const int row 10 const int col 10 c define row 10 define col 10orenum c style型別轉換 new type expression static cast expre...

C語言拾遺

1.操作符與基本型別 賦值運算子的優先順序低於算數運算子。如 x 3 2即x 3 2 優先順序 高於 高於 高於 一元操作符的關聯是從右到左,和 都必須邦定乙個變數或者叫 左值 如 x 注意 x 並不是左值。例如 z x y,相當於 z x y 字元 0 對應ascii的48,a 對應的是65。無論...