定义的引用变量,它只是一个别名,也占内存空间吗?占有多大空间?
----------------------------------
int a;
int b=&a;
此时,b是a的别名,我的理解,变量b应该不占内存空间呀。因为b只是a的另外一个称呼呀,是这样吗?可是如果定义一个类对象呢?
假如已经定义了一个类:studentstudent s1;
student s2=&s1;
此时,定义s1时一定为其分配空间了。此时s2是s1的别名,此时s2占用空间吗,占用多大的空间呢?另外,对于对象变量,对象在内存中的实际地址,存在哪里呢?s1是不是保存的就是对象变量的起始地址呢?就象数组一样。
----------------------------------
int a;
int b=&a;
此时,b是a的别名,我的理解,变量b应该不占内存空间呀。因为b只是a的另外一个称呼呀,是这样吗?可是如果定义一个类对象呢?
假如已经定义了一个类:studentstudent s1;
student s2=&s1;
此时,定义s1时一定为其分配空间了。此时s2是s1的别名,此时s2占用空间吗,占用多大的空间呢?另外,对于对象变量,对象在内存中的实际地址,存在哪里呢?s1是不是保存的就是对象变量的起始地址呢?就象数组一样。
解决方案 »
- 运行后出现以下错误求原因Fiber.exe 中的 0x7c80a378 处最可能的异常: 0xC0000005: 读取位置 0x0caa326e 时发生访问冲突
- 选项“mapinfo:lines”中的语法错误
- 如何让应用程序打开时,在屏幕的指定的位置!~?
- 对话框程序默认的Enter事件,怎么修改
- 为什么我在ADialog中定义了CButton m_b1,使用它时输入“.”后能自动弹出它的参数窗口,而在BDialog中同样操作输入“.”后却不能弹出提示
- 想考研了,请大家给点意见啊
- 这样也会耗资源吗,他妈的CString,高手来看看
- 怎样向网络蚂蚁那样在IE里加入"使用网络蚂蚁下载"的菜单?
- Realplay客户端与服务器的自动连接
- 谁能告诉我为什么类的成员函数不能做为函数指针参数传入???-@@
- 树形控件收缩展开的问题
- 有用上网本跑vs 2008的吗?
引用内部是用类似指针的方式实现的, 一般和指针大小一致.
int &b = a; student s1;
student &s2 = s1;占不占空间应该是编译器说了算. 即使占估计也就一个指针的位置. 使用者基本上不需要考虑的.
int &b = a; student s1;
student &s2 = s1;此时,定义s1时一定为其分配空间了。此时s2是s1的别名,此时s2占用空间吗,占用多大的空间呢? 另外,对于对象变量,对象在内存中的实际地址,存在哪里呢?s1是不是保存的就是对象变量的起始地址呢?就象数组一样。
_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;