gpt4 book ai didi

c - 关于函数中变量定义的问题

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

包括

main()
{
int a;
for(a=1; a<=4 && printf("%d ",a); a++)
{
int a;
static int b=a;
printf("%d ",(a++)-b);
}
getchar();
getchar();
}

在这段代码中,打印输出是 1 0 2 1 3 2 4 3。我明白为什么 int a;部分与在 for 函数外部定义的 int a 的工作方式不同,以及为什么 static int b;仅使用 a 的主值定义一次;但是为什么 printf 中的 (a++) 部分会影响 a 的顺序值呢?难道我们不重新定义 int a;每次 for 函数运行?提前致谢。

最佳答案

内部的 a 是未定义的,因此,编译器可以使用它喜欢的任何值。它喜欢的值显然是“a”占用的字节的当前值。第二次通过循环,你会得到一个全新的 inner-a,它恰好与之前的 inner-A 位于同一位置并假定它的值。

但这只是巧合 --- 如果以其他方式更容易做到这一点,编译器会(并且合法地可以)。

另请注意,在第二个 a++ 之后永远不会读取 a 的值。如果您打开优化,编译器很可能会决定它不需要执行该增量,并且 a 的内部值将始终为零。

关于c - 关于函数中变量定义的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2563309/

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