(C++内存管理)如果我们有一个int x = 1234,而int&y = x ...那么堆栈中y的地址是多少?

4 c++ heap pointers memory-management

我们正在为周二的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( z );

   foobar( x );
   foobar( y );
   foobar( *z );

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我们试图一步一步地完成它,看看堆栈上分配了什么,堆上分配了什么,以及每个东西的价值是多少.

我们不明白的是:&y保存x的地址,但是&y =&x ...那么y的地址是多少?比如,堆栈不需要保持y ???

小智 8

长话短说 - 没有勺子 y.因此,堆栈中不会分配任何内容y.这是因为y在你的情况下是一个参考.

引用只是一个别名,没有地址.换句话说 - 它是一样的x,但命名不同.这就是你应该如何将引用视为C++程序员.实际上,编译器可能会使用对象的地址来实现引用(即,当您通过引用传递时).即使在这种情况下,它可能只存储在寄存器中,因此没有存储器地址.但这些是您不应该了解的实现细节:)我建议您查看此C++ References FAQ.