C語言中有些變數可以不賦初值而有些不行為什麼

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

1樓:張簡淑珍遊汝

圖不行是因為b是作為判斷條件的如果b沒有賦初值可能會得到一個隨機數,你可以把x1理解成一個容器,就會得到一個想不到的結果,而下圖x1是一個普通變數它不是作為判斷條件的,它等待往裡面放東西

2樓:匿名使用者

圖1中一開始定義b時沒有賦值,b就是一個很大的數,故不會進入迴圈,直接輸出b;而圖二中開始定義x1也是沒有賦值,x1也是一個很大的數,但是while的判斷條件是day>0,會進入迴圈,迴圈中給x1賦值了 所以能輸出正常計算值。

3樓:楓若神明

樓主我又來了。

其實不能說不賦初值就不行,對於區域性變數,不賦初值的話,其實他裡面存的是一個隨機的值,誰也不知道他是多少,因此如果沒賦初值的情況下就使用它,程式是完全不可控的,如你的圖1,直接在while裡去判斷b了,因此這個while判斷是不可控的。

但是圖2裡面,while(day>0),這個是一定成立的,所以對x1的第一次使用就是x1=2*(x2+1);相當於給他重新賦值了,這個時候x1的值已經固定了,再往下走就沒有問題了。

建議:即使如圖2所示最後結果是成功的,也不建議樓主這樣寫**,記住區域性變數一定要初始化,你可以int a=0;初始化,也可以int a; a=0;這樣去初始化。

4樓:空

但是靜態區域性變數不賦初值,不也是自動為0嗎?

c語言中定義變數不賦初值是多少?

5樓:enjoy蘰踄繧鍴

沒有加static,預設為auto 型,此時,不給初值,變數的初值是隨機的。

如果加專了static不給初值,變數的屬初值是預設的 0。

其實不能說不賦初值就不行,對於區域性變數,不賦初值的話,其實他裡面存的是一個隨機的值,誰也不知道他是多少,因此如果沒賦初值的情況下就使用它,程式是完全不可控的,如你的圖1,直接在while裡去判斷b了,因此這個while判斷是不可控的。

【c語言】

c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。

儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的c語言程式可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平臺。

二十世紀八十年代,為了避免各開發廠商用的c語言語法產生差異,由美國國家標準局為c語言訂定了一套完整的國際標準語法,稱為ansi c,作為c語言最初的標準。

C語言中有哪些儲存型別,C語言中變數的儲存型別有哪幾種,儲存方式哪幾種?謝嘍

千鋒教育 c語言中的儲存型別有auto,extern,register,static 這四種,儲存型別說明了該變數要在程序的哪一個段中分配記憶體空間,可以為變數分配記憶體儲存空間的有資料區 bbs區 棧區 堆區。1.auto儲存型別 auto只能用來標識區域性變數的儲存型別,對於區域性變數,auto...

c語言中有string型別變數嗎

這裡的 string 有 二 義性。1 如果 string 是普通詞彙,c語言中有字元型別變數嗎 答,有。字元型別 用 char 宣告。char str this is a string 2 如果 string 是專用詞彙,c語言中有string型別變數嗎 答,沒有。string 是 類,是 cla...

c語言中有,C語言中有printf 3 0f f6 1f n , fahr,celsius 其中 是什麼意思?

printf 3.0f f6.1f n fahr,celsius 3.0f 的意思是用3位浮點型數來輸出變數fahr的值 小數位為零 f6.1f n 的意思是用6位小數點為1位的浮點型數來輸出變數celsius的值.其中的小數點前後的兩位數分別表示要輸出變數的總位數和它的小數位數。 格式說明的字首 ...