C語言的變數

2021-07-14 10:38:24 字數 1055 閱讀 8600

1、變數的資料型別:整型等

2、變數的作用域:區域性變數和全域性變數

3、數量的儲存型別:register、static、auto

當乙個可執行檔案被執行(./a.out),即建立乙個程序。此時,系統會為程序分配活動空間,此空間一般為虛擬空間,一般為4gb。作業系統不會通過完整對映將虛擬記憶體對映到物理聶村上上(那樣做也不夠),而是呼叫mmu這個軟體,通過寫時複製的功能將需要處理的檔案對映到記憶體上。

寫實複製:比如說有2mb的資料需要處理(一共1gb的資料),那此時就將2mb的資料搬到物理記憶體中進行處理

棧空間(由系統管理):區域性變數、函式形參、自動變數(auto)

堆空間:malloc、ralloc、caollc等函式

全域性資料區(分三塊):

1、bss段:未初始化的全域性變數

2、or段(only read):系統常量(不可修改)

3、靜態資料儲存區:由static修飾的變數

例子:char *ptr()

int main()

結果是不可被列印出的,因為ptr被分配在棧空間,在呼叫時已經被釋放掉了,將第三行修改為:static char ptr = "hello world";即可,將ptr分配至堆空間

如果將陣列修改為指標變數,就不會報錯,因為此時的hello world為全域性變數,不會釋放

全域性變數的區域性變數區別:

1、未初始化的全域性變數儲存在全域性資料區的bss 段,而區域性變數分配在棧空間

2、未初始化的全域性變數的預設值為0,未初始化的全域性變數的值不確定

3、全域性變數的作用域的整個程式,而區域性變數的作用域為整個函式

例子:int main()

會報錯,因為ptr數值在全域性資料區的or段,不可 修改其值

1、宣告不分配空間,定義分配空間

2、宣告可多次,定義只有一次

c語言的變數

資料變數的三個屬性 作用域 連線屬性和儲存型別。程式 中的變數在編寫是要考慮三個屬性,同時程式要經歷編譯,鏈結和執行時的記憶體分配。1.作用域 在編譯時有四種不同型別的作用域 檔案作用域,函式作用域,塊作用域和原型作用域 1 塊作用域 內的 段。2 檔案作用域 以檔案為單位,可以通過 include...

c語言的變數

在程式執行期間,由系統分配固定的儲存空間 全域性變數全部是靜態儲存。程式開始時給全域性變數分配儲存空間,結束時釋放。在程式執行期間,根據需要進行動態的分配儲存空間方式。一般在函式呼叫前後分配和釋放。a 函式形參,在呼叫前沒有儲存空間,呼叫時分配儲存空間。b 函式中定義的沒有用static宣告的變數 ...

C語言 變數

整形變數的定義 有符號 int a int a 有符號整形 範圍 0 2 32 long int a long a 有符號長整形 範圍 0 2 32 short ing a short a 有符號短整型 範圍 0 2 16 無符號unsigned int a unsigned a 無符號整形 範圍 ...