我知道引用是语法糖,因此代码更容易读写.
但有什么区别?
以下答案和链接摘要:
NULL),而引用总是指对象.&obj + 5).澄清一个误解:
C++标准非常谨慎,以避免规定编译器如何实现引用,但每个C++编译器都将引用实现为指针.也就是说,声明如下:
Run Code Online (Sandbox Code Playgroud)int &ri = i;如果它没有完全优化,则分配与指针相同的存储量,并将地址
i放入该存储中.
因此,指针和引用都使用相同数量的内存.
作为基本规则,
有趣的读物:
指向引用的指针,指针的引用和C++中指针的指针有什么区别?
一个人应该优先于另一个?
我正在学习指针和参考,我的问题涉及这个解释,特别是以下部分:

这表明声明int& ri = i创建了一个新的内存单元格,其值为&i并存在于未知的内存位置.
为了测试这个理论,我写了一个简单的案例,结果如下所示:

我感到困惑的是,r并且i具有相同的内存地址,这似乎与读数相矛盾.结果表明,int& ri = i松散意味着"为内存单元创建一个别名i并调用它r",这样两者都指向完全相同的单元格.
文件是否正确,或者我错过了什么?
我们正在为周二的CS期中考试.
我们的教授在网上提供了一些学习资料,包括:
"此外,您应该能够根据一些代码绘制内存图,例如:"
void foo( int &x )
{
x = 1000;
}
void bar( int *x )
{
*x = 1000;
}
void foobar( int x )
{
x = 1000;
}
int main()
{
int x = 1234;
int &y = x;
int *z = &x;
int array_1[5];
int *array_2[5];
array_1[0] = 10;
array_2[0] = (int*)10;
array_2[1] = &y;
array_2[2] = &x;
foo( x );
foo( y );
foo( *z );
bar( &x );
bar( &y );
bar( …Run Code Online (Sandbox Code Playgroud) 我发现以下声明.两个东西可能存在于同一地址,即实际变量和引用变量具有相同的内存地址,这怎么可能?
无论引用如何实现,引用都具有与其引用的项相同的内存地址.
在下面的代码片段中,当使用&引用变量时,我们得到引用变量所指向的变量的地址,但在函数调用期间,引用变量将在堆栈帧上分配,因此如何获取该地址价值?
#include <iostream>
using namespace std;
void modify(int& x)
{
x=9;
cout<<&x<<endl<<x<<endl;
}
int main() {
int a=8;
modify(a);
cout<<&a<<endl<<a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这里&x和&a都打印相同的值,这是变量a的地址,那么有什么方法可以得到参考变量x的地址?