久久综合九色综合97婷婷-美女视频黄频a免费-精品日本一区二区三区在线观看-日韩中文无码有码免费视频-亚洲中文字幕无码专区-扒开双腿疯狂进出爽爽爽动态照片-国产乱理伦片在线观看夜-高清极品美女毛茸茸-欧美寡妇性猛交XXX-国产亚洲精品99在线播放-日韩美女毛片又爽又大毛片,99久久久无码国产精品9,国产成a人片在线观看视频下载,欧美疯狂xxxx吞精视频

有趣生活

當前位置:首頁>生活>c語言中變量在定義時可以初始化(C語言變量初始化是必須的嗎)

c語言中變量在定義時可以初始化(C語言變量初始化是必須的嗎)

發(fā)布時間:2024-01-23閱讀(20)

這個問題很重要!實際上前面講那么多,其中有一個很重要的目的就是為了講這個知識點。所謂初始化就是“第一次賦值”的意思。我們先來看一個程序:

#include <stdio.h> int main(void) { int i; printf("i = %d ", i); return 0; }

這里i沒有被賦值,只是定義了一個存儲空間。這時輸出這個空間的內容,你覺得輸出的值會是多少?是一個任意值嗎?可以通過編譯、鏈接、執(zhí)行看一下,如下圖所示。

c語言中變量在定義時可以初始化(C語言變量初始化是必須的嗎)(1)

這時單擊上圖中圓圈標出的向上的箭頭,就可以看到警告的原因,如下圖所示。

c語言中變量在定義時可以初始化(C語言變量初始化是必須的嗎)(2)

然后對著警告的那一行雙擊,在程序中就會標出是哪個地方發(fā)出警告,或者直接按 F4 鍵就可以直接在程序中標出警告的地方。如果是 error 報錯的話,同樣可以這么操作。

但需要注意的是:首先,圖 2 中警告的原因只是軟件自動檢測出來的,不一定是真正警告的原因;其次,標示出來的警告位置也不一定是真正警告的位置。因為軟件不可能百分之百的智能化,它只能推測。所以如果在標示出的位置找不到錯誤,那就往上幾行或下幾行看看。

現(xiàn)在來看一下它警告的內容是什么:

warning C4700: local variable 'i' used without having been initialized

warning 是警告;C4700 表示的是一個地址;local 是“本地的”,就是“局部的”意思。

我們看到警告的原因是,“局部變量 i 使用了,但是沒有給它初始化”,也就是說未初始化就使用它了。我們先不管警告,直接鏈接、執(zhí)行,看結果是什么:

i = -858993460

如果i的值是任意值的話,那么再單擊一次“執(zhí)行”顯示的應該是另一個值。但事實上不管重新執(zhí)行多少次,還是這個值,這個值是不變的。下面就來討論一下原因。

前面講過,int i; 運行的結果是將變量 i 和內存中的某一個單元產生關聯(lián)。然后變量 i 就代表那個內存單元了,要想操作該內存單元只需要通過變量i就可以了。

在上面程序中沒有給這個內存單元賦值就把它給輸出了,所以問題就出在這里。你只定義了變量 i,但是沒有給它賦值并把它輸出了。所以關鍵就是看看 i 里面放的到底是什么。

首先,內存條是一個硬件設備,硬件設備里面要么是 0 要么是 1。計算機肯定得通電,沒有電就運行不起來,有電之后它就會通過各種二極管、三極管之類的元器件產生高低電平。

如果電壓在某一個范圍之上,就認為是 1,在某一個范圍之下,就認為是 0。所以 1 就表示高電平,0 就表示低電平,即電壓的高或低產生 1 或 0。這時候只有兩種狀態(tài),要么是 1,要么是 0。所以說 i 里面存放的就是由 0 和 1 組成的代碼,不可能里面什么都沒有!因為計算機要工作肯定得有電,有電就不可能是空的,有電就會轉化成 1 或 0 這樣的高低電平。所以硬件上要么是 1 要么是 0,不可能既不是 1 也不是 0,什么都沒有!計算機硬件沒有那種狀態(tài),這也是為什么計算機只能識別二進制的原因。所以變量 i 所關聯(lián)的那內存單元里面肯定是由 0 和 1 組成的代碼。

這里 i 單元雖然沒有給它賦值,但這個空間在之前可能被其他軟件使用過。比如放電影的時候將電影中的某一部分數(shù)據(jù)放到了這個單元中。電影看完之后一關閉,這個單元空間就釋放了,即操作系統(tǒng)就會回收該內存空間,以便分配給其他軟件使用。

但需要注意的是,操作系統(tǒng)雖然回收了該內存空間,但它并不清空該內存空間中遺留下來的數(shù)據(jù),這句話很重要。

但這樣的話就會出現(xiàn)一個問題:以前的軟件如果使用過 i 這個空間的話,那么那些垃圾數(shù)據(jù)還在里面保留著,如果沒有初始化,那么它里面就應該是一個隨機的垃圾值。但是當我們多次執(zhí)行的時候發(fā)現(xiàn)它不是一個隨機的值,而是一個不變的值。這是為什么呢?這個值叫“填充數(shù)字”或叫“填充字”。

微軟公司在設計 VC 這個軟件的時候,在它內部添加了一些特殊的處理。即如果發(fā)現(xiàn)一個變量里面存放的是一個垃圾值,就認為沒有給它賦初值,那么系統(tǒng)就會自動將一個很小的,如 –858993460 這個填充數(shù)字給放進去。所以我們看到的結果都是一個不變的值。

那么微軟公司為什么要這么設計?首先放入填充數(shù)字一定有好處!由于放入填充數(shù)字肯定會導致程序運行速度變慢,因為內部要進行處理。所以如果沒有好處的話微軟公司肯定不會這樣設計!

大家想想,如果之前使用i這個空間后遺留下來的數(shù)字是 5,那么輸出 5 后,你可能以為 i 里面存放的是一個有效的數(shù)據(jù)。但如果是一個很小的數(shù)字,這個數(shù)字基本上是很少有人使用的,那么你一看就知道可能是沒有初始化。所以這個數(shù)字就是提醒你變量沒有初始化。

========

綜上所述,任何一個變量在使用之前必須要先對它進行初始化。不初始化的話使用它就沒有實際意義了。在實際編程中,習慣上在定義變量的時候就對它進行初始化,這是一個很好的編程習慣。

但是按照 C89 標準,變量的定義只能在程序或復合語句的開頭。這樣就會有一個問題:“很多在開頭定義但到后面才會用到的變量,在定義的時候如何對它們進行初始化呢?”。

此時習慣上將它們初始化為0,然后等后面真正用到它們的時候再重新賦值。當然,定義時不初始化也可以,等到后面知道該給它賦什么值的時候再給它賦值也行。但還是建議大家在定義時將它們初始化為 0,養(yǎng)成這個習慣。

c語言中變量在定義時可以初始化(C語言變量初始化是必須的嗎)(3)

如果你還想更深入地學習以及其他知識,不管你是轉行也好,初學也罷,進階也可~

值得關注我!

,

歡迎分享轉載→http://www.avcorse.com/read-62175.html

相關文章

    Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖