C语言中函数返回的整数值

C语言中函数返回的整数值,c,function,integer,output,C,Function,Integer,Output,我有一个像这样的C程序 #include <stdio.h> void print_int() { int i; i++; printf("%d\n",i); } int main() { print_int(); print_int(); return 0; } 我对这个输出有疑问。这不应该是两个垃圾值,因为变量i没有初始化吗?您得到的是未定义的行为 可能变量i在每次调用时都驻留在相同的物理内存位置,它在启动时恰好被清除,并且没有任

我有一个像这样的C程序

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

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

您得到的是未定义的行为

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


当然,这只是“运气”,这个程序被破坏了。

未初始化的局部非静态变量的值是不确定的,在它还未初始化时使用它会导致未定义的行为。有时它似乎能起作用,但实际上却不行


然而,你的情况很容易解释。局部变量
i
必须占用一些内存位置。恰好在第一次调用函数时,该内存位置包含
0
。下次调用该函数时,它将位于同一位置。这种行为不应该被计算在内,未定义的行为仍然是未定义的行为。

它是未定义的行为。1也可以是垃圾。
1
2