假设:
int i, j = 1;
是否定义了i
的值?如果是这样,它是什么?
我怀疑这是重复的,但搜索起来有点困难 - 如果有人能找到它让我知道。
答案 0 :(得分:14)
例如:
#include <iostream>
int a, b=1; // a=0, b=1
int main(void) {
int p, q=1; // p=undef, q=1
return 0;
}
局部变量证明:
#include <iostream>
int main(void) {
{
int x = 99; // change stack where a would be
}
int a, b=0;
std::cout << a << std::endl;
return 0;
}
答案 1 :(得分:5)
如果此代码在全局范围内,则i
将为0.否则i
未定义。
答案 2 :(得分:2)
如果这是定义局部变量,则不会定义i
的值。
答案 3 :(得分:2)
不,它没有定义,如果您尝试使用它,编译器应该抱怨,具体取决于语言。
答案 4 :(得分:1)
您展示的代码相当于:
int i;
int j = 1;
这意味着i
已定义,但尚未初始化。
答案 5 :(得分:1)
i
将是未定义的。如果您尝试使用i
而不指定某些内容,则会导致未定义的行为。
任何好的编译器都会警告你这样的事情。使用类型为int
的未定义变量可能是无害的,但不要使用未定义的指针。
也许不是今天,但前段时间,在充足的硬件和软件保护之前,你可能会使用带有未初始化变量的指针来损坏机器的BIOS。
故事的道德:如果没有初始化,请不要使用它。
答案 6 :(得分:0)
int i
是一个定义语句,但没有赋值。
Extern int i
是声明。
答案 7 :(得分:0)
变量i可以包含从0到垃圾的任何内容。 请参阅以下链接