在C++中在任何能用指针的地方都可以改用引用。那两者区别何在?
指针:即一类专门用来存储别的变量地址的变量,它的内容没有别的,只存别的变量的地址。而且指针变量的内容可以任意改变(也就是存储的地址可以改变,指向任意变量)。例:int *p = 变量地址 p就是指针变量
引用:做为其它变量的一个别名而存在,就像一个人的外号一样。外号与姓名都是指本人。而引用只能与一块内存地址唯一绑定,只能初始化一次,此后只代表这块内存地址的别名。而且必需在声明的时候初始化。 例:int & a = b; //此时a就是引用,做为变量b的别名
相同点:
1.指针与引用其实没有实质性的差别,引用可以认为是一种特殊的指针,它传递的也是地址。只是编译器对其进行了包装。使其应用起来语法更加清晰。
2.在任何能用指针的地方都可以用引用来代替。
不同点:
1.引用声明的时候必需初始化,且只能与一块内存地址绑定,以后不能再改变指向其它内存地址。而指针变量可以声明的时候不初始化,且指向的地址可以再次改变,比引用更具有灵活性。
2.引用不能用常量来初始化。例:int &a = 9; 此时编译错误,因为此时引用a是做为常量9的别名而存在的,而此时的引用却不是常量引用(即引用前没有加const关键字,来声明这引用内容不可改变)。所以编译器认为此时引用a与9存在不一致性。直接报错,因为引用a可以改变内容,改变了内容也就不再是9了。所以直接错误,正确的做法是 const int &a = 9; 保证引用a是常量 和9一样的性质。