gpt4 book ai didi

c - 在 C 中的 printf 中使用语句体

转载 作者:太空宇宙 更新时间:2023-11-04 07:05:40 24 4
gpt4 key购买 nike

我正在学习一门我们在系统级编程方面做了大量工作的类(class),现在我们开始介绍 C。我们得到了一些代码并被告知要说明打印出的值每个“printf”语句。我知道如何使用 Java 和 Python 等语言执行常规打印语句。但是给出的代码包含我以前从未见过的打印部分的主体。语句按照A、B、C、D的顺序执行,代码如下:

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 中的主体。所以该主体中的第一个语句是打印 t,此时它是 2。然后在我们打印 2 之后,我们将 t 中的值更改为 3。之后我们转到 C,它只打印 t,它是 3(我猜?我在这里不确定)。之后我们转到包含 D 的主体。 Int t 是上面声明的全局变量,但它从未被初始化(代码的第一部分除外)。那么在包含 D 的第二部分中,是否会出现错误,因为 t 未在该代码块中初始化?

2
3
3
Error

我觉得我错了。

最佳答案

首先,你有一个全局变量 t,它被初始化为 0(据我所知,如果没有显式初始化,C 中的所有全局变量都被初始化为 0)

然后,打开一个block,声明一个局部变量t,并初始化为2,这会遮蔽同名的全局变量(在java中这是一个错误,编译器会报错并拒绝使用同名) , 对于整个 block 。

block 内的第一个 printf 打印 2。

然后一个嵌套 block 打开,里面有一个printf。此 printf 还将使用局部变量 t,再次打印 2。

然后t赋值为3。这个"t"不能是局部变量。

然后,嵌套 block 关闭,我们回到声明局部 t 的第一个仍然打开的 block 。此处的 printf 打印 3。

然后第一个 block 完成,因此局部变量 t 消失了。一个新 block 打开,最后一个 printf 打印全局变量 t 的值,这是该 block 中唯一已知的值。它打印 0。

关于c - 在 C 中的 printf 中使用语句体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33225007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com