以下黑色文字来自网上流传的《C语言面试宝典》
2、“引用”与指针的区别是什么?
答 、1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
3) 不存在指向空值的引用,但是存在指向空值的指针。
指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。
流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用
评注:这不是C语言面试宝典吗?怎么出来引用了?
话说C++的引用当时还迷糊人,因为和Java的引用完全不是一回事。所以我觉得别名更适合描述C++的引用:从一出生,你就属于那个家伙,不管它丑还是帅,也不管他穷还是富,那个啥,贫贱不能移嘛。
Java通过实际行动告诉我们它的引用和C++的指针很像(如果你不管GC的话),大家都存内存地址,灰常和谐。不过,C++的指针就是root了的Java引用,可以参与运算,乍一看还以是个整型呢,Java引用完成的只是作为指针该做的事儿罢了。
其实我是想说“==”运算的,Java引用在进行这个运算的时候比较的是引用自己的值(有点类似地址值),C++指针也是这样,但C++引用一点儿也没个引用样子、呃,参数传递不用构造临时对象那个不算。。。
哎,C#咋就那么非主流呢,自己的string类型号称是引用类型,为啥俩string==的时候比较的是字符串的值?最逗的是它也有Equals函数,比较的是不区分大小写的字符串的值,您比Java碉堡了有木有。哦,我忘了C#好像可以运算符重载,不知道是不是这个原因?