所在的位置: c++ >> 基本简介 >> c引用与指针的区别

c引用与指针的区别

★相同点:

1.都是地址的概念;

指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。

★区别:

1.指针是一个实体,而引用仅是个别名;

2.引用使用时无需解引用(*),指针需要解引用;

3.引用只能在定义时被初始化一次,之后不可变;指针可变;

引用“从一而终”^_^

4.引用没有const,指针有const,const的指针不可变;

5.引用不能为空,指针可以为空;

6.“sizeof引用”得到的是所指向的变量(对象)的大小,而“sizeof指针”得到的是指针本身(所指向的变量或对象的地址)的大小

7.指针和引用的自增(++)运算意义不一样;

引用是C++中的概念,初学者容易把引用和指针混淆一起。一下程序中,n是m的一个引用(reference),m是被引用物(referent)。

intm;

intn=m;

n相当于m的别名(绰号),对n的任何操作就是对m的操作。例如有人名叫王小毛,他的绰号是“三毛”。说“三毛”怎么怎么的,其实就是对王小毛说三道四。所以n既不是m的拷贝,也不是指向m的指针,其实n就是m它自己。

引用的一些规则如下:

(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。

(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。

(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。

引用的主要功能是传递函数的参数和返回值。C++语言中,函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递。

以下是“值传递”的示例程序。由于Func1函数体内的x是外部变量n的一份拷贝,改变x的值不会影响n,所以n的值仍然是0.

voidFunc1(intx){x=x+10;}intn=0;Func1(n);cout“n=”nendl;//n=0

以下是“指针传递”的示例程序。由于Func2函数体内的x是指向外部变量n的指针,改变该指针的内容将导致n的值改变,所以n的值成为10.

voidFunc2(int*x){(*x)=(*x)+10;}#;intn=0;Func2(n);cout“n=”nendl;//n=10

以下是“引用传递”的示例程序。由于Func3函数体内的x是外部变量n的引用,x和n是同一个东西,改变x等于改变n,所以n的值成为10.

voidFunc3(intx){x=x+10;}#;intn=0;Func3(n);cout“n=”nendl;//n=10

如果的确只需要借用一下某个对象的“别名”,那么就用“引用”,而不要用“指针”,以免发生意外。比如说,某人需要一份证明,本来在文件上盖上公章的印子就行了,如果把取公章的钥匙交给他,那么他就获得了不该有的权利。







































治白癜风最有效的方法
白癜风的专科专家



转载请注明:http://www.nydjfy.com/jbjj/1507.html