鉴于:
int i = 42;
int j = 43;
int k = 44;
Run Code Online (Sandbox Code Playgroud)
通过查看变量地址,我们知道每个地址占用4个字节(在大多数平台上).
但考虑到:
int i = 42;
int& j = i;
int k = 44;
Run Code Online (Sandbox Code Playgroud)
我们将看到,变量i确实需要4个字节,但j需要没有和k再次发生堆栈上的4个字节.
这里发生了什么?看起来j在运行时根本就不存在.那么我作为函数参数收到的引用呢?这必须在堆栈上占用一些空间......
虽然我们在这里 - 为什么我不能定义数组或引用?
int&[] arr = new int&[SIZE]; // compiler error! array of references is illegal
Run Code Online (Sandbox Code Playgroud) 我知道数值在python中是不可变的.我还读过python中的所有东西都是对象.我只是想知道数字类型是否也是python中的对象.因为如果它们是对象,那么变量实际上是引用变量对吧?这是否意味着如果我将一个数字传递给一个函数并在函数内修改它,那么会创建两个带有两个引用的数字对象?python中是否存在原始数据类型的概念?
注意:我也把它当作对象.但是在python导师中可视化说不同:http://www.pythontutor.com/visualize.html#mode=edit
def test(a):
a+=10
b=100
test(b)
Run Code Online (Sandbox Code Playgroud)
或者它是可视化工具中的缺陷?
我读过引用只是符号表中存在的变量的别名。考虑下面的代码
int main()
{
int y = 6;
int &z = y;
int k = 43;
test(2,y,5,78);
cout << &y << "\n";
cout << &z << "\n";
cout << &k << "\n";
}
void test(int a,int & x, int g, int h)
{
cout << &a << "\n";
cout << &x << "\n";
cout << &g << "\n";
cout << &h << "\n";
}
Run Code Online (Sandbox Code Playgroud)
对于我得到的输出
0039F740
0039F848
0039F748
0039F74C
0039F848
0039F848
0039F830
Run Code Online (Sandbox Code Playgroud)
如果引用不占用堆栈中的内存,为什么内存会被偏移。例如。在功能测试中,局部变量a位于0039F740,而g位于0039F748。g 不应该在 0039F744 吗?
有人可以深入解释一下吗?