我正在學習一門課程,我們在系統級編程方面做了很多工作,現在我們已經開始對C語言進行介紹了。我們給出了一些代碼,並告訴我們以陳述每個'printf'語句打印的值。我知道如何使用Java和Python等語言進行常規打印語句。但是給出的代碼具有我以前從未見過的印刷部分的實體。這些語句的順序的執行,B,C,D。下面是代碼:在printf中使用語句體C
int t; /* This variable is global */
{
int t = 2;
printf("%d\n", t); /* A */
{
printf("%d\n", t); /* B */
t = 3;
}
printf("%d\n", t); /* C */
}
{
printf("%d\n", t); /* D */
}
,混淆我的是一些打印語句有機構的一部分。打印聲明內的打印聲明?
所以這是我在想什麼:t = 2所以當我們到達A時,它首先在A內執行主體。因此,該體中的第一條語句是打印此時爲2的t。然後,在打印2之後,我們將t中的值更改爲3.之後,我們轉到C打印t,它是3(我猜?我不確定)。之後,我們轉到包含D的主體。Int t是上面聲明的全局變量,但它不會被初始化(除了代碼的第一部分)。因此,在包含D的第二部分中,由於t未在該代碼塊中初始化,是否會出現錯誤?
2
3
3
Error
我覺得我錯了。
他們沒有屍體。大括號('{}')只是創建新的範圍,並且與'printf'語句無關。 –
@OliverCharlesworth - 好的,謝謝。所以它會打印:2,3,2,錯誤?第三個值是否爲2,因爲t在大括號範圍內變爲3?另外,說D是一個錯誤還是僅僅打印垃圾值是否正確? – GenericUser01
發生這種情況是因爲在第一次呼叫中't = 2',接下來兩次't = 3',最後一次呼叫最後't未初始化'。 (例如,從來沒有爲外部作用域't'設置值 - 它只是在該範圍內聲明爲'int t') –