變量初始化的意義

在C/C++程序中一般有一下存儲區(qū):
1.棧,由編譯器自動分配釋放,一般指函數(shù)內(nèi)部的存儲空間。
2.堆,由程序員手動分配釋放,若未釋放,程序結(jié)束時會被由OS回收
代碼中通過new/malloc/relloc等顯示申請的內(nèi)存都屬于堆上,這些內(nèi)存需要手動的去free/delete
3.靜態(tài)存儲區(qū):全局變量和靜態(tài)變量的存儲是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。
4.常量存儲區(qū),這是一塊比較特殊的存儲區(qū),他們里面存放的是常量,不允許修改

在學習C語言的時候,絕大部分教材里一定會降到聲明變量的時候需要初始化。

int a;
printf("%d", a);   //此時的輸出就可能是一個隨機值。

看一個例子:

void f() {
  int a = 1;
  printf("address %p:%d", &a, a);
}
void g() {
  int a ;
  printf("address %p:%d", &a, a);
}
int main() {
  f();
  g();
  return 0;
}
結(jié)果輸出:
address0x7fffbf281ea4:1
address0x7fffbf281ea4:1

為什么兩個a的地址一樣?

f和g兩個函數(shù)內(nèi)的a都是棧上的空間,f()執(zhí)行完后,那塊棧上空間,已經(jīng)被回收,標記為可用了。然后調(diào)用g(),g和f的大小是一樣的,沒出意外的話,g的棧地址還是從上次f的那塊開始,所以a地址一樣的。

為什么兩個a的值一樣?

棧空間被回收了,只是表示那塊地址可以被使用,但地址里的內(nèi)容,系統(tǒng)可不否則維護,在你釋放了后去檫除,所以g中的a指向了上次a的那塊地址,內(nèi)容還是那塊內(nèi)容。所以a的值還是1。
這就是變量初始化的意義。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,696評論 18 399
  • Java byte code 的學習意義 為啥要學java bytecode,這就跟你問我已經(jīng)會python了為...
    shanggl閱讀 1,864評論 0 3
  • 2016年國慶假期終于把此書過完,整理筆記和體會于此。 關(guān)于書名 書名源于俄羅斯的演員斯坦尼斯拉夫斯基創(chuàng)作的《演員...
    李劍飛的簡書閱讀 7,452評論 2 65
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,619評論 30 472
  • 前段時間跑跑老師發(fā)過來一篇《未來簡史》的解讀文章,讓我?guī)椭籼翦e誤。和老師交流完,老師問我:“你讀懂了嗎?” “(...
    Me_ly閱讀 536評論 0 2

友情鏈接更多精彩內(nèi)容