基础知识的有关问题

基础知识的问题
// const member.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;
class Cone{
public:
Cone(int a):x(a),r(x)//构造函数的同时初始化常数据,const必须初始化,在此初始化。
{

}
void printf();
const int &r;//引用类型的常数据成员
private:
const int x;//常数据成员
};
void Cone::printf()
{
cout<<"x = "<<x<<",r = "<<r<<endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
Cone one(100);
one.printf();
return 0;
}

这个里面的int &r 是一个引用类型,说明r指的是一个地址还是什么?这里有点没有搞懂,还有就是r(x)这里,r ,x不同类型的能这样赋值么??

------解决方案--------------------
引用类型就是一个别名而已。其实你使用引用的时候操作的就是被引用的那个数据。
------解决方案--------------------
1、说明r是一个引用,变量的别名。在这里不是地址。
2、r(x)是让r成为x的引用啊。
------解决方案--------------------
1.r只是你被引用的那个对象的别名而已。你看你的构造函数里面的初始化,const int &r = x;其实r就相当于x的外号一样。它并没有像指针那样重新开辟了一款新的内存空间,并指向他。
2.这是一个引用的初始化,不能等效于你说的什么不同类型数据类型的赋值哈。
------解决方案--------------------
对于引用的解释 应该是这样子滴:
变量 有首地址,存在于内存中,

定义引用 其实 就是 定义了一个别名,但是 系统 会维护 一个 四字节的 内存区域 来保存 你那个变量的 首地址(也就是指针),当 通过 引用 访问 数据的时候 ,实际上是通过 间接 访问 这个 内存区域中的 数据(也就是指针) 来实现对原数据的 修改,表面 上看起来就像 是个别名。
操作系统对引用的操作 就是上面那种方法,但是当我们 对引用 求一些值,比如 地址,大小 等 得到的还是 原值 对应的值。
#include <stdio.h>
void main()
{
double a=12.2;
double &b=a;
b=15.55;
printf("%f\n",a);
printf("%d\n",sizeof(b)); // 8
printf("%p %p\n",&a,&b); // 两者相同
}