1. 程式人生 > >變數定義與宣告的區別

變數定義與宣告的區別

終於明白了 札記如下
宣告:告訴編譯器變數的型別 在哪裡 或者函式的特徵(返回值 引數型別 個數)
定義:告訴編譯器 在此處分配儲存空間 建立變數和函式

同一變數定義只有一個(幹嘛要多處分配空間呢 記憶體很寶貴的~)
但是可以宣告多次

變數有點混淆--
int a; 是個宣告 也是個定義
extern int a; 只是宣告
所以宣告包含定義,有足夠的資訊讓編譯器建立變數的宣告 就是一個定義
為了讓int a;不是定義(別給a分配空間) 前面加extern吧
(所以 extern int a=1;是要出錯的 --BB)

函式很清楚--
宣告就是沒有函式體的 定義則有
事實上函式宣告前本來也要加extern的 但是可以省略 因為大家都很懶 誰想多打字呢?

end~

附送 程式記憶體簡介

一個由c/C++編譯的程式佔用的記憶體分為以下幾個部分

1、棧區(stack) 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。

2、堆區(heap) 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由OS回收 。注意它與資料結構中的堆是兩回事,分配方式倒是類似於連結串列,呵呵。

3、全域性區(靜態區)(static),全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。 - 程式結束後有系統釋放

4、文字常量區 常量字串就是放在這裡的。 程式結束後由系統釋放

5、程式程式碼區存放函式體的二進位制程式碼。