我正在学习一门课程,我们在系统级编程方面做了很多工作,现在我们已经开始对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') –