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
。下次您调用该函数时,它将位于同一位置。但是,不应指望此行为,未定义的行为仍然是未定义的行为。
我有这样一个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
。下次您调用该函数时,它将位于同一位置。但是,不应指望此行为,未定义的行为仍然是未定义的行为。