C語言變數型別與記憶體

2021-07-10 05:36:45 字數 1613 閱讀 8371

摘錄:

c語言有豐富的資料型別和運算子,因此計算能力非常強大,計算過程中使用的值一般用變數來儲存。變數也是有分型別的,不同型別的變數有不同的儲存型別、不同的生命週期、不同的作用域,c語言也提供了一些關鍵字來設定變數的屬性(比如設定儲存型別、生命週期)。

c語言根據變數作用域的不同,將變數分為區域性變數和全域性變數。

int a;//全域性變數

int main ()

根據變數定義地方不同,決定了該變數的作用範圍,因此有了區域性和全域性之分。

c語言根據變數的儲存型別的不同,可以把變數分為:自動變數、靜態變數、暫存器變數。變數的儲存型別決定了變數何時建立、何時銷毀以及它的值能保持多久,也就是決定了變數的生命週期。

void test(int a, int b)
函式中的形參ab,變數中定義的cd都是區域性變數。

#include 

int a;

void test()

int main()

return

0; }

第3行的變數a、第6行的變數b都是靜態變數,第9行的變數c、第16行的變數i是自動變數。

因為第6行的變數b是靜態變數,所以它只會被建立一次,而且生命週期會延續到程式結束。因為它只會建立一次,所以第6行**只會執行一次,下次再呼叫test函式時,變數b的值不會被重新初始化為0。

注意:雖然第6行的變數b是靜態變數,但是只改變了它的儲存型別(即生命週期),並沒有改變它的作用域,變數b還是只能在test函式內部使用。

輸出結果:

b=1,c=1

b=2,c=1

b=3,c=1

int main()
注意:由於計算機中暫存器數目有限,不能使用太多的暫存器變數。如果暫存器使用飽和時,程式將暫存器變數自動轉換為自動變數處理

為了提高運算速度,一般會將一些頻繁使用的自動變數定義為暫存器變數,這樣程式盡可能地為它分配暫存器存放,而不用記憶體

變數定義方式的不同,其在記憶體中的儲存方式也不相同,在程式中也體現為不同的作用域和生命週期。

有3個地方可以用於儲存變數:普通記憶體(靜態記憶體)、執行時堆疊(動態記憶體)、硬體暫存器。

自動變數是儲存在堆疊中的。

├———————┤高階記憶體區域

│ …… │

├———————┤

│ 棧│ 向低位址擴充套件

├———————┤

│ …… │

├———————┤

│ ├———————┤

│ 堆│ 向高位址擴充套件

├———————┤

│ …… │

├———————┤低端記憶體區域

靜態變數是儲存在靜態記憶體中的,也就是不屬於堆疊。

靜態變數的生命週期貫穿整個程式, 程式結束後由系統釋放。

例子:

int a = 0; //全域性初始化區

char *p1; //全域性未初始化區

main()

暫存器變數儲存在硬體暫存器中,比儲存在記憶體中的變數訪問效率更高。

C語言,變數與記憶體

符號位 最高位為符號位,正數該位為0,負數該位為1 任何數值在記憶體中都是以補碼的形式儲存的。1 10的二進位制形式 1000 0000 0000 0000 0000 0000 0000 1010 原 2 除符號位取反 1111 1111 1111 1111 1111 1111 1111 0101 ...

C語言基礎 變數與記憶體

在函式定義的變數都是區域性變數,區域性變數是存放在棧中的 1 變數的儲存細節 1 區域性變數是存在棧中,先分配位元組位址大的然後分配位元組位址小的,所有先定義的變數的位址大,後定義變數位址小 2 變數的位址是所占用儲存空間中,位元組位址最小的那個位址編號 2 字元 char c a 1 查ascii...

C語言 暫存器變數與記憶體變數

暫存器變數是什麼?及它的儲存種類有哪些?靜態變數 自動變數與暫存器變數的儲存 前兩天看師兄給的c語言的一本小冊子,看到 記憶體變數或暫存器變數是指程序執行過程中的變數是在記憶體中還是在暫存器中的變數。以前學的時候從來沒有注意過,記憶體變數和暫存器變數指的是什麼呢?這裡和語言中宣告的全域性變數 區域性...