C++中的引用混淆 在C++程序设计语言中,它表示在初始化之后不能引用一个不同的对象。然而,当我写下面的代码时,它打印了20,这意味着引用引用了另一个对象 int a = 10; int b = 20; int& ref = a; ref = b; cout << ref << endl;
然而,当我写下面的代码时,它打印了10,a的值C++中的引用混淆 在C++程序设计语言中,它表示在初始化之后不能引用一个不同的对象。然而,当我写下面的代码时,它打印了20,这意味着引用引用了另一个对象 int a = 10; int b = 20; int& ref = a; ref = b; cout << ref << endl;,c++,C++,然而,当我写下面的代码时,它打印了10,a的值 int a; int b; int& ref = a; ref = b; a = 10; b = 20; cout << ref << endl; 为什么会发生这种情况?我应该如何理解C++引用? REF= B并不意味着RF现在应该引用B。 这意味着将b的值复制到ref引用的变量 所以这个代码: int& ref = a ref = b; a = 10; 相当于 a = b; a = 10; ref=b
int a;
int b;
int& ref = a;
ref = b;
a = 10;
b = 20;
cout << ref << endl;
为什么会发生这种情况?我应该如何理解C++引用? REF= B并不意味着RF现在应该引用B。
这意味着将b的值复制到ref引用的变量
所以这个代码:
int& ref = a
ref = b;
a = 10;
相当于
a = b;
a = 10;
ref=b并不意味着ref现在应该引用b。
这意味着将b的值复制到ref引用的变量
所以这个代码:
int& ref = a
ref = b;
a = 10;
相当于
a = b;
a = 10;
排队
int& ref = a;
您将ref设置为变量a的引用。然后在下一行中将此对象的值设置为b的值:
ref = b;
请注意,a现在的值为b,由于您尚未初始化它,因此该值将为零
接下来,将a的值设置为10
此时ref也将设置为10,因为它是对a的引用。然后将b的值设置为20。但这对ref没有什么区别,因为它是对a的引用,a仍然是10
所以,当你打印出ref时,你会得到一个-10的值。
int& ref = a;
您将ref设置为变量a的引用。然后在下一行中将此对象的值设置为b的值:
ref = b;
请注意,a现在的值为b,由于您尚未初始化它,因此该值将为零
接下来,将a的值设置为10
此时ref也将设置为10,因为它是对a的引用。然后将b的值设置为20。但这对ref没有什么区别,因为它是对a的引用,a仍然是10
因此,当您打印出ref时,您会得到a的值,即10。引用只是别名。它没有单独的内存。所以当你写作时:
int a = 10;
int b = 20;
int& ref = a; //ref has same address a a. Its just alias
ref = b; //value of b assigned to ref, ref still points to same address
cout << ref << endl;
它说ref是a的别名。和a地址一样
当您写入ref=b时,您将b的值分配给ref,然后再分配给a
因此,当您打印ref时,a和b都将打印相同的值,即20,但它们的地址不相同。a和b仍然使用不同的地址
在您的第二个示例中,ref是a的别名。然后给ref分配一个值b。ref的地址仍然是a。然后你改变了b的值。所以b得到一个新值,但ref仍然指向a的地址,而a的地址没有被修改
希望这能消除你的困惑
为了更好地理解,请尝试打印变量的地址和值。这样,您将更好地理解。引用只是别名。它没有单独的内存。所以当你写作时:
int a = 10;
int b = 20;
int& ref = a; //ref has same address a a. Its just alias
ref = b; //value of b assigned to ref, ref still points to same address
cout << ref << endl;
它说ref是a的别名。和a地址一样
当您写入ref=b时,您将b的值分配给ref,然后再分配给a
因此,当您打印ref时,a和b都将打印相同的值,即20,但它们的地址不相同。a和b仍然使用不同的地址
在您的第二个示例中,ref是a的别名。然后给ref分配一个值b。ref的地址仍然是a。然后你改变了b的值。所以b得到一个新值,但ref仍然指向a的地址,而a的地址没有被修改
希望这能消除你的困惑
为了更好地理解,请尝试打印变量的地址和值。这样,您会更好地理解。我制作了一个小程序,试图说明引用和指针之间的区别。希望这将帮助您了解不能使引用不同对象的对象是如何工作的:
int main()
{
int a = 10;
int b = 20;
int* p = &a;
std::cout << a << ", " << b << ", " << *p << ". p points to a\n";
*p = 11;
std::cout << a << ", " << b << ", " << *p << ". Changing p changes a\n";
a = 12;
std::cout << a << ", " << b << ", " << *p << ". Changing a changes p\n";
p = &b;
std::cout << a << ", " << b << ", " << *p << ". p points to b\n";
*p = 21;
std::cout << a << ", " << b << ", " << *p << ". Changing p now changes b, but a is unchanged as p no longer points to it\n";
b = 22;
std::cout << a << ", " << b << ", " << *p << ". Changing b changes p\n";
int& r = a;
std::cout << a << ", " << b << ", " << r << ". r references a\n";
r = 13;
std::cout << a << ", " << b << ", " << r << ". Changing r changes a\n";
a = 14;
std::cout << a << ", " << b << ", " << r << ". Changing a changes r\n";
r = b;
std::cout << a << ", " << b << ", " << r << ". The value of r is set to the value of b, but r still references a and thus a changes too\n";
b = 23;
std::cout << a << ", " << b << ", " << r << ". Changing b does NOT change r\n";
r = 24;
std::cout << a << ", " << b << ", " << r << ". Changing r only changes a\n";
}
这里的要点是,使用指针可以执行p=&b并引用不同的对象。这在引用中是不可能的。我制作了一个小程序,试图说明引用和指针之间的区别。希望这将帮助您了解不能使引用不同对象的对象是如何工作的:
int main()
{
int a = 10;
int b = 20;
int* p = &a;
std::cout << a << ", " << b << ", " << *p << ". p points to a\n";
*p = 11;
std::cout << a << ", " << b << ", " << *p << ". Changing p changes a\n";
a = 12;
std::cout << a << ", " << b << ", " << *p << ". Changing a changes p\n";
p = &b;
std::cout << a << ", " << b << ", " << *p << ". p points to b\n";
*p = 21;
std::cout << a << ", " << b << ", " << *p << ". Changing p now changes b, but a is unchanged as p no longer points to it\n";
b = 22;
std::cout << a << ", " << b << ", " << *p << ". Changing b changes p\n";
int& r = a;
std::cout << a << ", " << b << ", " << r << ". r references a\n";
r = 13;
std::cout << a << ", " << b << ", " << r << ". Changing r changes a\n";
a = 14;
std::cout << a << ", " << b << ", " << r << ". Changing a changes r\n";
r = b;
std::cout << a << ", " << b << ", " << r << ". The value of r is set to the value of b, but r still references a and thus a changes too\n";
b = 23;
std::cout << a << ", " << b << ", " << r << ". Changing b does NOT change r\n";
r = 24;
std::cout << a << ", " << b << ", " << r << ". Changing r only changes a\n";
}
这里的要点是,使用指针可以执行p=&b并引用不同的对象。这是不可能的。尝试打印A在你的第一个案例结束时,我应该如何理解C++引用?不能修改参考点所在的位置。初始化引用类型与分配引用类型不同。在int&ref=a;之后;,ref与a的意思完全相同。第一个等于int a=10;int b=20;a=b;,第二个是int a;int b;a=b;a=10;b=20;。尝试打印一个在你的第一个案例结束时我应该如何理解C++参考?不能修改参考点所在的位置。初始化引用类型与分配引用类型不同。在int&ref=a;之后;,ref与a的意思完全相同。第一个等于int a=10;int b=20;a=b;,第二个是int a;int b;a=b;a=10;b=20;。因为你还没有初始化它,所以它将是零
别指望了。只有当a是函数的局部自动变量且cout为True时,它才可能为零。还取决于您使用的编译器。由于您尚未初始化它,因此它将为零。不要指望这一点。只有当a是函数的局部自动变量且cout为True时,它才可能为零。也取决于您使用的编译器。引用本身没有内存地址。它甚至可能根本不使用变量来实现。一旦引用绑定到某个对象,查询该引用的地址将返回它所引用对象的地址。就像给引用赋值一样,也会给引用的对象赋值。从引用中读取值将从引用的对象中读取。引用本身没有内存地址。它甚至可能根本不使用变量来实现。一旦引用绑定到某个对象,查询该引用的地址将返回它所引用对象的地址。就像给引用赋值一样,也会给引用的对象赋值。从引用中读取值将从它引用的对象中读取。