定义的引用变量,它只是一个别名,也占内存空间吗?占有多大空间?
----------------------------------
int a;
int b=&a;
此时,b是a的别名,我的理解,变量b应该不占内存空间呀。因为b只是a的另外一个称呼呀,是这样吗?可是如果定义一个类对象呢?
假如已经定义了一个类:studentstudent s1;
student s2=&s1;
此时,定义s1时一定为其分配空间了。此时s2是s1的别名,此时s2占用空间吗,占用多大的空间呢?另外,对于对象变量,对象在内存中的实际地址,存在哪里呢?s1是不是保存的就是对象变量的起始地址呢?就象数组一样。

解决方案 »

  1.   

    你那&全放错地了...
    引用内部是用类似指针的方式实现的, 一般和指针大小一致.
      

  2.   

    你写错了吧int a; 
    int &b = a; student s1; 
    student &s2 = s1;占不占空间应该是编译器说了算. 即使占估计也就一个指针的位置. 使用者基本上不需要考虑的.
      

  3.   

    谢谢,粗心,写错了。int a; 
    int &b = a; student s1; 
    student &s2 = s1;此时,定义s1时一定为其分配空间了。此时s2是s1的别名,此时s2占用空间吗,占用多大的空间呢? 另外,对于对象变量,对象在内存中的实际地址,存在哪里呢?s1是不是保存的就是对象变量的起始地址呢?就象数组一样。
      

  4.   


    _TEXT SEGMENT
    ;注意这里, r占用堆栈了
    _r$ = -8 ; size = 4
    _a$ = -4 ; size = 4
    _main PROC; 16   : int main(){ push ebp
    mov ebp, esp
    sub esp, 8; 17   : 
    ; 18   :  int a = 1024;
    ;一般变量就是直接操作
    mov DWORD PTR _a$[ebp], 1024 ; 00000400H; 19   :  int& r = a;
    ;引用里装的就是个地址
    lea eax, DWORD PTR _a$[ebp]
    mov DWORD PTR _r$[ebp], eax; 20   :  r = 1256;
    ;利用r里存的a的地址间接操作a
    mov ecx, DWORD PTR _r$[ebp]
    mov DWORD PTR [ecx], 1256 ; 000004e8H
    明白了没? 就是个指针而已.
    type a = 1024;
    type& r = a;
    r = 1256;
    就相当于
    type a = 1024;
    type* r = &a;
    *r = 1256;