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.