C++ 是i的值,定义如下:int i,j=1;
鉴于: 是否定义了C++ 是i的值,定义如下:int i,j=1;,c++,C++,鉴于: 是否定义了i的值?如果是,是什么 我怀疑这是一个重复,但搜索起来有点困难-如果有人能找到它,请告诉我。如果这是定义局部变量,则不会定义I的值。不,它没有定义,编译器应该抱怨如果您试图使用它,这取决于语言。如果此代码在全局范围内,然后i将为0。否则将不定义i。int i是一个定义语句,但未为其赋值 Extern inti是声明。 全局变量由 默认为其默认值(0 (适用于int) 局部变量未初始化 默认情况下 例如: int i, j = 1; #包括 int a,b=1;//a=0,b
i
的值?如果是,是什么
我怀疑这是一个重复,但搜索起来有点困难-如果有人能找到它,请告诉我。如果这是定义局部变量,则不会定义
I
的值。不,它没有定义,编译器应该抱怨如果您试图使用它,这取决于语言。如果此代码在全局范围内,然后i
将为0。否则将不定义i
。int i
是一个定义语句,但未为其赋值
Extern inti
是声明。- 全局变量由 默认为其默认值(0 (适用于int)
- 局部变量未初始化 默认情况下
int i, j = 1;
#包括
int a,b=1;//a=0,b=1
内部主(空){
int p,q=1;//p=undf,q=1
返回0;
}
局部变量的证明:
#include <iostream>
int a, b=1; // a=0, b=1
int main(void) {
int p, q=1; // p=undef, q=1
return 0;
}
#包括
内部主(空){
{
int x=99;//更改堆栈的位置
}
int a,b=0;
std::cout您显示的代码相当于:
#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;
}
这意味着,i
已定义,但未初始化。i
将未定义。如果您尝试使用i
而不为其赋值,则会导致未定义的行为
任何好的编译器都会警告你类似的事情。使用类型为int
的未定义变量可能是无害的,但不要使用未定义的指针
也许不是今天,但在一段时间以前,在没有足够的硬件和软件保护之前,使用带有未初始化变量的指针可能会损坏机器的BIOS
这个故事的寓意是:如果它没有初始化,就不要使用它。这个变量可以包含从0到垃圾的任何内容。
请参考以下链接
有关详细信息抱歉,我没有注意到。我认为这取决于编译器--Windows DDK编译器现在给了我一个警告,但它确实取决于编译器。我尝试过的两个编译器并不总是抱怨(尝试在for
语句的第三位使用它-for(;;+I)
)Windows DDK编译器:<代码> TEMP.CPP(4):警告C47:本地变量“i”使用而不被初始化可能是因为您断言编译器应该抱怨。没有这样的要求,我可以看到。(并且语言是C++的OP标签)。我说编译器应该抱怨,而不是说它必须抱怨。:)一个好的编译器会抱怨,一个平庸的编译器不会。我想我可以看出另一个原因…尽管我会说这有点苛刻。哦,好吧。:)我没有定义,但声明。@Mihran请检查他们指定的这个链接。。在一些教科书中他们也这样指定。。如果我错了,我会更新我自己,无论如何谢谢..+1,因为我识别了我将被定义,如果它有文件作用域。我认为,定义和初始化通常被认为是指同一件事,即引用变量的值。要明确的是:变量是声明的,但它的值没有定义或初始化。标准说:'A decl'aration可能会将一个或多个名称引入翻译单元…(请参见3.1.1[basic.def]),而“声明是一个定义,除非…它包含外部说明符…且没有初始值设定项…”(请参见3.1.2[basic.def])。这意味着int i;
是一个定义(无extern
).声明、定义和初始化变量是三件不同的事情。
int i;
int j = 1;