C 中函数返回的整数值

Integer Values returned by a function in C

我有这样一个C程序

#include <stdio.h>
void print_int()
{
    int i;
    i++;
    printf("%d\n",i);
}
int main()
{
    print_int();
    print_int();
    return 0;
}

这个程序返回的输出是

1
2

我对此输出有疑问。这不应该是两个垃圾值,因为变量 i 没有初始化吗?

您遇到了未定义的行为。

可能变量 i 在每次调用时驻留在相同的物理内存位置,它恰好在启动时被清除,并且那里没有写入垃圾,所以您会看到那些特定的值。如果您要在对 print_int() 的两次调用之间调用其他函数,结果很可能会有所不同。

那当然是"luck",这个程序坏了。

未初始化的局部非静态变量的值为不确定,在它仍未初始化时使用它会导致未定义的行为。有时它看起来可以工作,但实际上没有。

不过你的情况很容易解释。局部变量 i 必须占用一些内存位置。恰好是该内存位置在首次调用该函数时包含 0 。下次您调用该函数时,它将位于同一位置。但是,不应指望此行为,未定义的行为仍然是未定义的行为。