主题:论"引用"作法强横篇
void main()
{
int* a=new int;
*a=10;
int *b=a;
int *c;
c=a;
cout<<"执行 int* a=new int; "<<endl;
cout<<"执行 *a=10; "<<endl;
cout<<"执行 int *b=a; "<<endl;
cout<<"执行 int *c; "<<endl;
cout<<"执行 c=a; "<<endl;
cout<<endl;
cout<<"指针a本身的地址(即&a): "<<&a<<endl;
cout<<"指针b本身的地址(即&b): "<<&b<<endl;
cout<<"指针c本身的地址(即&c): "<<&c<<endl;
cout<<"指针a贮存的东西(即a) : "<<a<<endl;
cout<<"指针b贮存的东西(即b) : "<<b<<endl;
cout<<"指针c贮存的东西(即c) : "<<c<<endl;
cout<<endl;
int* d=new int;
*d=10;
int *&e=d;
int *&f=d;
cout<<"执行 int* d=new int; "<<endl;
cout<<"执行 *d=10; "<<endl;
cout<<"执行 int *&e=d; "<<endl;
cout<<"执行 int *&f=d; "<<endl;
cout<<endl;
cout<<"指针d本身的地址(即&d): "<<&d<<endl;
cout<<"指针e本身的地址(即&e): "<<&e<<endl;
cout<<"指针f本身的地址(即&f): "<<&f<<endl;
cout<<"指针d贮存的东西(即d) : "<<d<<endl;
cout<<"指针e贮存的东西(即e) : "<<e<<endl;
cout<<"指针f贮存的东西(即f) : "<<f<<endl;
cout<<endl;
cout<<"==============================个人分析================================"<<endl;
cout<<" 首先,由上面运行结果可知,引用是一模一样的(除了变量名),而指针只是指向的"<<endl;
cout<<"东西一样.\n"<<endl;
cout<<" 网上百度了一下,发现谈指针与引用的异同的人很多,先举一些说法:"<<endl;
cout<<"1. 引用是一个const指针,一旦被赋值,不允许改变."<<endl;
cout<<"2. 用引用,编译器会自动为其解引用,而不用像指针那样使用\"*\"."<<endl;
cout<<"3. 引用是直接数据的内存虚拟空间地址,而指针是变量,占有实际地址."<<endl;
cout<<"4. 引用无法改变指向对象,而指针可以."<<endl;
cout<<"5. 引用本身没有标识,没有自已的地址."<<endl;
cout<<"6. 引用必须在初始化时被指定."<<endl;
cout<<"8. \"**\"与\"*&\"是一码事,只是语法不同,看到\"*&\"就要想到\"**\"...."<<endl;
cout<<"9. ......"<<endl;
cout<<" 还有很多,简洁起见就不一一列举了,但是看了之后,感觉还是有些别扭,总"<<endl;
cout<<"觉得他们没说到骨子里去,又或是未能给一个便于理解且合乎情理的说法.以"<<endl;
cout<<"下,我将从人情的角度谈谈个人愚见,也为那些初学者找个简单点的借口,^-^"<<endl;
cout<<" 不知大家接触了C++的类思想了吗?我们知道有三种访问权限:私有,公开,保护."<<endl;
cout<<"若是全部私有了,则无法对外交流,若是全部公开了,则缺乏安全感.于是便有"<<endl;
cout<<"了介于私有和公开之间的保护权限.事物都在发展,同情理,若是只能采用值"<<endl;
cout<<"传递,未免太劳累了吧?若是全用指针,则又未免不太安全,于是引用这种可"<<endl;
cout<<"传地址,又安全的机制的产生那是呼之欲出的事."<<endl;
cout<<" 可是我们来看一看实现语句,不免别扭,以前接触的都是: "<<endl;
cout<<"X类型= X类型, "<<endl;
cout<<" 这种顺其自然的事自容易理解,简单类型就传简单类型的值, 指针就传指针的"<<endl;
cout<<"值(注意指针本身的值是地址哦), 天经地义.可你来这么一个: "<<endl;
cout<<"X类型 & = X类型 "<<endl;
cout<<" 说是在传址吗?可一看,明明就是两个简单类型嘛(简单为例,以便于理解).可虽"<<endl;
cout<<"看起来是简单类型,它又明明是在传址...是有些不太顺眼...有人说是在起别名,诚"<<endl;
cout<<"然,它的作用确实和起别名相似,可是起别名都是这方主动对对象起啊,你有听过那"<<endl;
cout<<"方的对象自已走过来套你起的名字吗? "<<endl;
cout<<"没有吧...呵呵... "<<endl;
cout<<"那么到底怎么解释这个语句\"X类型 & = X类型\"容易理解呢?"<<endl;
cout<<"抛开那些流行的行话不听,抛开那些麻烦的过程不看,一句话就行了:\"强制地址传递\"!"<<endl;
cout<<"呵,简而言之,"<<endl;
cout<<" &: \"强制传址\"! "<<endl;
cout<<"嘻嘻,一点愚见,为初学者提供便利. 有不妥处,欢迎指教"<<endl;
cout<<"而你大可在以后学熟了,再回过头来了解其过程"<<endl;
}