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

時間 2021-10-17 04:39:55

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語言中define巨集定義和變數定義的聯絡和區別

巨集定義是全域性性的,變數定義是區域性性的, 巨集定義主要在預處理階段完成,由前處理器進行字元替換,變數定義則會在記憶體中為變數分配地址。 吉檀迦利 define巨集定義的量是做常量處理的,如 define price 30,下文只要遇到price就代表常量30,他與變數的區別之一是在書出語句中pr...

c語言中變數的平方怎麼輸入,C語言中變數的平方怎麼輸入

天雲一號 在c 中,變數a的平方可以有2種方式進行輸入 1 直接本身相乘a a 2 用函式pow進行求變數a的平方,即pow a,2 注 函式pow的用法如下 函式格式 double pow double x,double y 功 能 計算x的y次冪 返 回 值 計算結果 當使用pow函式時,需要將...

c語言中定義變數的資料型別比如intchar有

1.首先你要多看看記憶體管理方面的內容。記憶體是由系統管理的,int和char,如果是常量那麼他們會被分配到常量區,如果是靜態變數,會被分到靜態變數區,區域性變數,又不一樣。不同的定義,記憶體地址肯定是不同的,這個系統自己管理。2.沒影響。但對執行時所佔空間就就有影響。源程式檔案大小隻是 量的大小 ...