C++ 引用

对于这样的两段定义,其效果有什么区别?如何更有效的使用引用?:
int s1=2;
int s2=s1;
/**/
int s1=2;
int &s2=s1;
/**/

指针和引用操作符的区别

指针和引用是相似的概念,但并不是相同的。它们都是指向一个对象,但是指针可以允许这个指向随时变化,并且它允许你指向一个空对象。引用可不一样,引用在初始时就必须指向一个对象,并且这个指向永远不能变化,也就是说永远只能指向这个对象,不能改变。可以这么理解,指针是一个变量的指向,引用是一个常量的指向。

指针和引用在操作上也有区别,指针使用操作符* 和-> ,引用使用操作符& 和. (点)。

比如,在定义时他们使用不同的操作符:

定义指针: int *number ; // 可以不初始赋值

定义引用: string s = “hangcool” ;

string& ps = s ; // 必须初始赋值,这样ps 就指向了s 。

在指向一个变量的成员时使用不同的操作符:

指针指向:x->y ; // 指向x 指针的成员y ;

引用指向:x.y ; // 指向x 引用的成员y ;

当然我们也可以这样写:(*x).y 等价于 x->y 。

在指针的概念里必须清楚,x 代表指向某个地址的地址值,*x 代表指向某个地址的变量值。

另外,除了在定义指针和引用的地方用到* 和& ,它们还有一个重要的用途:

在变量前使用* 和& 它们有不同的含义:

* : 称作 引用操作符 。 它表示要取的是表达式所表示的地址指向的内容。它可以被翻译为“… 指向的数值” ("value pointed by") 。

比如,* mypointer 可以被读作“mypointer 指向的数值”。

& : 称作 地址或反引用操作符 。它被用作一个变量前缀,可以被翻译为“… 的地址”("address of") ,

比如,&variable1 可以被读作 variable1 的地址。

参考资料:http://gqf2008.javaeye.com/blog/451044

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-20
区别就是第一种情况下,s1,s2是两个独立的个体,虽然暂时相等,但改了一个另一个不会变。
第二种情况下s1,s2是同一个变量,在内存中用的也是同一块4字节的空间,改了一个另一个值也会变。

引用一般只在函数参数中用到,有两个作用,一是如果想通过函数改变参数的值,可以在参数类型后加上引用符&。还有个作用就是避免了参数的值传递,减少了复制所需要的时间,有时候变量很大(自定义类型)复制是很慢的。
相似回答