【发布时间】:2014-06-23 23:41:52
【问题描述】:
自动 Storage 在函数中使用不会重新初始化使用 auto 关键字声明的 i 变量.
Practice.c : main() 和 func() 在 Practice.c
#include <stdio.h>
main()
{
func();
func();
func();
}
func()
{
auto int i=1;
printf(" i = %d",i);
i=i+1;
}
编译后执行Practice.exe输出如下:
i = 1
i = 1
i = 1
每次 main() 调用 func() i 都会重新初始化为 1。这是正确的,因为 i 的范围在func() 块,当控件脱离 this 块时,i 的值丢失。因此,当我第二次调用此 func() 函数时,i 的值将重新初始化为 1。
检查以下New.c程序。
New.c : 包含 main() 和 func()
#include <stdio.h>
main()
{
func();
func();
func();
func();
func();
func();
func();
func();
}
func()
{
auto int i;
printf(" i = %d",i);
i=i+1;
}
为了确定,我调用了函数 func() 8 次。 但是在 New.c 中, i 没有被初始化。当我编译后执行这个程序时,它的输出如下:
i = 4201582
i = 4201583
i = 4201584
i = 4201585
i = 4201586
i = 4201587
i = 4201588
i = 4201589
输出显示每次调用的增量。这背后的确切原因是什么?
【问题讨论】:
-
您正在从非常古老的 C 文本或非常过时的 C 文本中学习。虽然
auto关键字在 C 中仍然存在,但基本上从未使用过。 -
@duskwuff 也许你是对的。我是初学者,知识很少,所以我从我所拥有的开始。但如果你能提供正确的理由,那真的很有帮助。
标签: c automatic-storage