在linux中寫乙個程式,裡面全域性變數,區域性變數,static,const,常數,陣列,輸出這些變數的位址(包括賦值的和沒有賦值的,各類資料型別)
#include
int a;
int b = 1;
int const c = 2;
static int d;
static int e = 3;
char src1[20];
char dest1 = ;
int main()
;printf("全域性變數,未初始化 %p\n",&a);
printf("全域性變數,初始化 %p\n",&b);
printf("常全域性變數 %p\n",&c);
printf("靜態全域性變數,未初始化 %p\n",&d);
printf("靜態全域性變數,初始化 %p\n",&e);
printf("全域性陣列,未初始化%p\n",src1);
printf("全域性陣列,初始化 %p\n",dest1);
printf("區域性變數,未初始化 %p\n",&f);
printf("區域性變數,初始化 %p\n",&g);
printf("常區域性變數 %p\n",&h);
printf("靜態區域性變數,未初始化 %p\n",&i);
printf("靜態區域性變數,初始化 %p\n",&j);
printf("區域性陣列,未初始化%p\n",src);
printf("區域性陣列,初始化 %p\n",dest);
}在linux中的執行結果截圖
由結果可以看出
常全域性變數在乙個區域
區域性變數、陣列(包括已初始化和未初始化)、常區域性變數,在同乙個區域
靜態區域性變數、常全域性變數、靜態全域性變數、全域性陣列(包括已初始化和未初始化)在一片區域,但是已經初始化的在未初始化的之前
程序的位址空間分配詳見c語言第三課
變數在記憶體的位置
1 首先,講下 堆 heap 和 棧 stack 的區別 乙個由 c c 編譯過的程式占用的記憶體分為一下幾個部分 1 棧區 stack 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。這個棧的操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,...
變數和值在記憶體中的儲存位置
變數和值在記憶體中的儲存位置 一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結...
變數和值在記憶體中的儲存位置
一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結...