2016-11-04 53 views
-2

在這段代碼中,爲什麼我得到i =「一些垃圾值」作爲輸出?我看到我正在申報,但值= 10,未分配。爲什麼?開關櫃內部 - 變量定義相關

main() 
{ 
int a =1; 
switch (a) 
{ 
int b = 10; 
case 1: printf ("b = %d \n", b); 
break; 
} 
+1

編譯'-Wall'並修復警告。 – user3386109

回答

3

b未被初始化。該任務不在交換機中的任何情況下,因此它將選擇堆棧中的任何內容。

+0

如果我說,在執行階段完成分配,而譯員已經完成了聲明,那麼我會錯誤嗎?在執行過程中,隨機值從棧中拾取。 – Doherty

+0

如果我說的話,我會錯誤嗎?在執行階段完成任務時,譯員已經完成了聲明。在執行過程中,隨機值從棧中拾取? @Pablo Alcubilla – Doherty

+0

就是這樣。編譯器爲所有變量分配內存。然後執行它們被初始化。 –

1

如果你想有一個case語句裏面的變量,這樣做的正確方法是:

switch(a) 
{ 
case 1: 
{ 
    int b=10; //start a new block scope 
    printf("b=%d",b); 
} 
break; 
} 
+0

我知道,但你共享的解決方案改變了我的需求。在您的代碼中聲明的int b不會被其他情況訪問。無論如何,但那不是我想討論的事情。我只是想明白,爲什麼我的代碼行爲出乎意料。 @Akshay Immanuel – Doherty