C語言中的變數只定義不賦值會發生什麼情況

2025-02-16 19:30:13 字數 3268 閱讀 9145

1樓:後振英霍申

既然是變數,就都可能會變。你讓它作加減乘除,當然就會變了。

你是想問變數的域嗎?

函式體(包括main函式。

中定義的變數的有效期一般只在函式中有效,也會在函式每次被呼叫時臨時分配空間作為變數。函式結束後,變數對應的空間會被釋放(雖然有些編譯器。

不管這些,仍然能夠通過指標訪問到原資料,但是這是不安全的)。而static型別的變數只在函式第一次被呼叫時初始化,之後的呼叫將不再會初始化該變數。

關於實參與形參:

c語言傳遞引數時,基本型別變數傳遞的僅僅是值,對應主函式。

體中的記憶體是不會被呼叫的函式直接訪問的。(指標那裡的swap那個例子很說明問題)。比如主函式里面定義了乙個a,呼叫的函式引數裡面有個a,然後主函式「把a傳進」呼叫的函式中——這種理解是錯誤的,應該是將a的值傳遞到呼叫函式私有的乙個變數a中(也就是有兩個a)。

還有不懂的再問吧。

2樓:虢寧薊媼

那看後面還使不使用這個變數了。

如果還使用,編譯器一般會給出警告,編譯能通過,執行時這個變數的值將是垃圾值。

如果不使用,可能會被編譯器優化掉,但即便不被優化也不影響程式執行,不過編譯器會提示某某變數從未使用過。

c語言中,不可以在定義變數時連續賦值嗎?

3樓:四舍**入

可以 。例如:

c=a=b=5;

這條語句是沒有錯誤的,首先可以瞭解到『=』作為乙個運算子,它有從右至左的結合性。

當定義了變數a,b,c且沒有賦初值的情況下,如果c=a=b,這樣子是絕對會報錯誤的;當c=a=b=5;這樣應可以翻譯成b=5;a=b;c=a;

所以可以。<>

4樓:物理公司的

c=a=b=5;

這條語句是沒有錯誤的,首先可以瞭解到『=』作為乙個運算子,它有從右至左的結合性。當定義了變數a,b,c且沒有賦初值的情況下,如果c=a=b,這樣子是絕對會報錯誤的;當c=a=b=5;這樣應可以翻譯成b=5;a=b;c=a;

所以可以。但不推薦。

5樓:網友

不可以,例如,int x=y=5; 由於賦值號是從右向左運算,這句是先把5賦給y,但此時y還沒定義,違反了「先定義後使用」的原則,所以是錯的。

在c語言中沒有對乙個變數賦值它的值是否自動賦

6樓:雍寒縱飛捷

是否會自動賦值為0,取決於變數的型別。

1、全域性變數,包括靜態全域性變數,和非靜態全域性變數,在沒有初始化值時,其值自動為0.

即定義在所有函式外,不歸屬於任何乙個函式的,在沒有初始化值時,自動為0。

2、靜態區域性變數。

當定義在函式內的區域性變數,有static

標記時,預設初始化為0值。

3、非靜態區域性變數,無預設初始值,c標準規定初始化值為隨機值,但具體實現由編譯器決定。

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

7樓:張簡淑珍遊汝

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

8樓:匿名使用者

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

9樓:網友

c語言中變數不賦初值是不能」使用「的。這個」使用「是指讀取變數的內容。因為,未賦初的變數中儲存的資料是個隨機值,其值不確定。

隨機值的產生原因:變數都是儲存在記憶體中的。程式執行以後,會在記憶體中給各個變數安置住處,這些地方以前可能有別的程式用過,裡面留有上次使用後的結果資料,但系統不負責分配空間,不會清理內容,需要程式設計者自己清理。

程式退出時也不清理內容,這就造成了後來者進到這個空間,看到一堆垃圾資料。

一些程式設計者,沒有」定義變數進行初始化「的程式設計習慣,或由於疏漏沒有給變數賦初值,而直接去使用變數中的資料,這樣就會出現隨機現象:有的可以,有的不可以。原因就是記憶體資料剛是否符合呼叫者的條件造成的,符合的就可以,不符合的就出錯。

因此,養成」定義變數就初始化「的好習慣,在使用變數」進行運算「前,一定要注意檢查變數是否已按自己的要求進行了賦值。

另:c語言全域性變數的初始化是系統自動完成的,程式設計者可以不用單獨處理。

10樓:楓若神明

樓主我又來了。

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

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

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

11樓:空

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

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

12樓:enjoy蘰踄繧鍴

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

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

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

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

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

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

在C語言中,當變數a賦值給變數b後,變數a的值就變為零了嗎

怎麼抄會變0啊,襲你這裡的 沒問題 你全貼出來看看 看了,應該這樣 include void main if a c if b c printf d,d,d n a,b,c getch 暈!要麼t b b a a t 要麼t a a b b t t b a t b a 當然不可以了,這樣把a的值丟了...

C語言中定義函式,變數是指向指標的變數,呼叫時要怎麼呼叫

首先fact函式返回的是double型別,第乙個引數是double型的二維指標.所以是 c i fact c,y,z 因為double c 3 是二維double指標,c i 是乙個double一維指標,c i 就是double型資料。c是二維指標,可以傳過去 c i fact c,y,z c i ...

c語言中給float型變數賦值時需要在數值後加f嗎

不加是double型別,double可以隱式轉換成float,所以可以不加,但是編譯器可能給你乙個警告。float型別的字面常量,後面需要加上f或者f來表示是乙個單精度浮點數。只所以專要這樣寫,是屬因為預設的浮點數常量都是double型別。include int main c語言中對變數賦值0x是什...