我最近才开始学习C ++作为我的10年级课程大纲的一部分,并且我只知道基础知识,因此我们将会感谢简单的答案(如果可能的话)。 我在初始化和分配之间相当困惑。
//Case 1
int a=5; //This is initialization
a=6; //This is assignment
根据我的理解,当你在声明变量时给它一个值来初始化变量。稍后在代码中更改此内容将是一项任务。正确?
怎么样:
//Case 2
int b;
{
//Block of code which does not call variable b
.
.
.
//End of block
}
b=6; // Is this initialization as well?
虽然' b'我们声明时未初始化,我们稍后会分配值' 6'。我们可以说' b'现在已初始化?或者,初始化和未初始化的术语不适用于' b'了吗?
我读了一个未初始化的变量保持"垃圾值"直到它没有初始化。究竟是什么"垃圾值"?
以下初始值设定项之间有何区别:'()',' {}'和' ='?
答案 0 :(得分:10)
好的,一旦声明变量而没有赋值,比如
int b;
这意味着编译器在内存中保留一些空间来保存值(确切地说,在这种情况下,内存在堆栈上保留)。但是由于你没有为变量赋值,它仍然保留了以前在内存中分配的空间所具有的值。这可以是任何事情。那些是垃圾值。
初始化者:
int b(1);
将值1赋值为(通常,它调用该类型的构造函数)
括号可用于初始化数组,如下所示(编辑):
int b[] = {1, 3, 5, 7};
并且=只是分配一个值。这个和第一个之间的区别只会在处理更复杂的类型(类)时变得有趣,你有构造函数
答案 1 :(得分:5)
易说:
取消初始化变量:
int a;
您声明一个变量,表示您分配内存但不为其分配值。所以如果值设置为0,它的编译器就会依赖它。所以可能有任何东西。多数人,你称之为垃圾值。
初始化变量:
int a = 0;
您声明一个变量,意味着您分配内存并为其分配值。
Assigne值:
a = 10;
您将右值(在本例中为10)分配给左值(a)。所以你不要分配新的记忆。
答案 2 :(得分:5)
你基本上是对的。
一些较旧的文本将第一个分配称为未初始化的变量和初始化",尽管这不是严格准确的。
"垃圾值"是任意值。它们看起来很有意义,或者可能是完全随机的。
答案 3 :(得分:3)
初始化用于初始化未初始化的值。
可以通过复制构造函数来完成,即int a = 1;
或int a(1);
,它可以通过赋值来完成,即int a; a = 1;
,它可以通过函数来完成,即int a; init(a);
。初始化不是“语言事物”,它只是指定未指定值的行为。
“垃圾值”是任意值。一些存储将被赋予未初始化的对象,并且尝试读取它将产生该存储器中发生的任何值。