在C語言中,為什麼定義變數的時候總是初始化為0呢?該怎麼理解

2021-10-17 04:40:50 字數 2575 閱讀 7796

1樓:符潔愚媚

因為變數是可以變動的,定義一個變數不初始化時,變數會是一個隨機數,進行計算了的時候,就會引用那個隨機數進行計算,會有誤差。

2樓:匿名使用者

如果全域性變數在定義時不初始化則初始值是0,如果區域性變數在定義時不初始化則初始值是不確定的。

3樓:沒字天書

誰說總是初始化0的,全域性變數和靜態變數會,區域性變數不一定,可恨的不同的編譯所採用的方式可能也不一樣,所以建議在使用任何變數前自己要初始化

4樓:

這個也是要根據程式考慮的,如果需要則初始化為0,如果對程式沒有影響,就可以不初始化。

5樓:

初始化時,會為變數開闢儲存空間,然後把位元組變成0000 0000(就相當於復位)。

存在這種可能,該地址以前已使用過,但系統並沒有**,擦除。就存在髒資料。

6樓:匿名使用者

初始化為0是一個好習慣,如果沒有初始化而再後面用他時為一個隨機數,自己都不知道錯在哪了

7樓:龔煒林

如果你不想去研究彙編**,那就記住:靜態儲存區的變數初始化為0,堆疊區(也就是區域性)的變數初始化值看編譯器,vc++6.0裡的編譯器初始化時把函式要用的堆疊區全初始化為0xcccccccc,而堆區(動態開闢)的值是不定的。

給你一個簡單的測試

#include

#include

int a;

int main()

c語言中: 如果一個變數為全域性變數的話,一般系統會初始化為0; 如為區域性變數,會得到一個隨機值;

8樓:匿名使用者

如在定義區域性變數時不賦值的話,則對靜態變數來說,編譯時自動賦初值0或空字元。而對自動變數來說,如果不賦值,它的值是一個不確定的值。

9樓:流一恆

對 可是自己在用變數的時候 最好都讓自己在使用前給他們初始化 這樣可以防止在多重迴圈中忘記對再次使用全域性變數的初始化

10樓:我不廢了

全域性變數和靜態(static)變數自動初始化為0或者nul。區域性變數必須先賦值再使用。

11樓:匿名使用者

全域性變數儲存位置在堆,也就是記憶體,系統開闢一個記憶體位置,然後把它初始化

區域性變數儲存在系統棧,暫存器,你可以理解成存在cup,這個不需要開闢,直接用,裡面有什麼就是什麼。

12樓:匿名使用者

c標準,變數使用前必須初始化,以防止意外結果的發生。

c語言中未初始化的變數的值是0麼

13樓:

全域性變數 、靜態變數初始值為0,區域性變數,自動變數初始值隨機分配。

定義區域性變數,其實就是在棧中通過移動棧指標來給程式提供一個記憶體空間和這個區域性變數名繫結。因為這段記憶體空間在棧上,而棧記憶體是反覆使用的,所以說使用棧來實現的區域性變數定義時如果不顯式初始化,值就是0的。

全域性變數連結時已分配空間,程式執行時,作業系統的載入器,負責把連結器分配給全域性變數的虛擬記憶體空間,對映到一個初始化為零的頁面,所以被初始化為零。全域性和靜態的預設初始化都是靠載入機制實現的。另外:

未初始化的符號在目標檔案的bss段中,而初始化的符號在data段中。

擴充套件資料

c語言變數的儲存型別,變數的初始化

儲存變數值的記憶體型別,有普通記憶體、執行時堆疊、硬體暫存器。預設儲存型別與變數宣告位置有關:像全域性變數這樣**塊之外宣告的變數儲存在靜態記憶體中,不在堆疊裡,程式執行期間始終存在;

**塊內宣告的變數預設儲存型別是自動的(automatic),稱為自動(auto)變數,儲存在堆疊中,執行到**塊時被建立,**塊執行完即被銷燬。

可以給自動變數加上關鍵字static,將它變為靜態儲存型別,它就會在程式執行期間一直存在,但是它的作用域是不變的,**塊外面還是不能用這個變數。

14樓:孫永超

c語言中,全域性變數和區域性靜態變數是儲存在靜態儲存區的,他們在分配的時候都被系統預設初始化為0;而區域性自動變數是在棧上分配記憶體的,如果不對它們進行初始化,那麼他們可能是任意的隨機值。

15樓:匿名使用者

這要看你定義的變數的屬性

全域性變數 靜態變數初始值為0

區域性變數,自動變數初始值隨機分配

16樓:匿名使用者

樓上說的對,看你所設定的是否是全域性變數還是區域性變數

17樓:南天_思語

預設都是0,但是會直接佔用空間。

18樓:匿名使用者

隨機數if( 該變數為靜態儲存方式)

初始化值為0

else未知量

19樓:匿名使用者

根據編譯器而定,不同的編譯環境是不同的。

有的是0, 有的是-1,有的是隨機值。

20樓:

要看是全域性變數還是區域性變數了

為什麼C語言中定義變數的時候不能連續給多個變數賦初值

c語言中 不能連bai續賦初值du說的是以下這種情zhi況 錯誤演dao示 int a b 0 補充 在for函式回中允許。eg for a b 0 y作為答一個變數,可以被多次賦值,當你再一次賦值時,會將上次的值覆蓋掉。在c語言中,當定義一個變數y時,系統會在記憶體中的某個地址分配一個儲存單元,用...

c語言中變數定義是什麼,c語言中exit怎麼定義?

型別說明符 變數名稱 賦值表示式。這是基本的。比如 int a 1 2 char b b 定義了一個整數型變數a 其值為1 2就是3,定義了一個字元型變數b,b的值為字元 b 型別說明符變數名稱還可以加修飾說明,比如前面加上const表示這是一個不能修改值得常量等等。變數 是一個能夠存放某個指定型別...

在c語言中 巨集定義是什麼,在C語言中 巨集定義是什麼?

在c語言源程式中,允許用一個識別符號來表示一個字串,稱為巨集,巨集定義是由源程式中的巨集定義命令完成的,巨集替換是由預處理程式自動完成的。巨集定義是c提供的三種預處理功能的其中一種,這三種預處理包括 巨集定義 檔案包含 條件編譯。c語言中的巨集定義用法分為兩種。1 不帶引數的巨集定義比較簡單,就是用...