指针和引用有什么区别

指针在引用变量的时候需要加&或*不够方便
而定义一个引用,就相当与给变量起了个别名,
在引用变量是只需要通过别名就可以直接引用对应变量



指针不确定有无初始化过其变量的值
引用不存在这个问题,要考虑同名的问题
基本上两者一样,看你用在什么方面了



其实这个问题,在《EffectiveC++》上有详细的说明:在一般情况下,引用和指针是一样的,但是根据条款23:在返回一个对象时,尽量不要用引用,而是用指针。



方便.



变量一样的用法,指针一样的功能.



指针可以不用初始化,
引用是一个变量的别名,在定义时必须指定某个变量。
而且,引用作为类成员时,构造时必须在成员初始化表符中指定。



引用的形参与实参是同一地址,而指针则需要分配内存



指针可以不初始化,不过一般初始化为NULL
引用是一个变量的别名,必须定义时初始化
指针指向变量的地址,通过指针来改变内容
引用是变量别名,也可以修改变量



尽可能用引用,少用指针,
指针可以为空.引用不能为空
引用是一个对象的别名
而指针是直接指象变量的内存地址的
指针不安全
所以
一般能用引用解决的又能用指针解决的
最好选择引用



指针和引用的主要区别:
引用是对象的别名,它总是有效,而指针可能无效。
指针需占用空间,引用不占。



引用是C++中的概念,初学者容易把引用和指针混淆一起。一下程序中,n是m的一
个引用(reference),m是被引用物(referent)。
intm;
int&n=m;
n相当于m的别名(绰号),对n的任何操作就是对m的操作。例如有人名叫王小毛,
他的绰号是“三毛”。说“三毛”怎么怎么的,其实就是对王小毛说三道四。所以n既不
是m的拷贝,也不是指向m的指针,其实n就是m它自己。
引用的一些规则如下:
(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。
以下示例程序中,k被初始化为i的引用。语句k=j并不能将k修改成为j的引
用,只是把k的值改变成为6。由于k是i的引用,所以i的值也变成了6。
inti=5;
intj=6;
int&k=i;
k=j;//k和i的值都变成了6;
上面的程序看起来象在玩文字游戏,没有体现出引用的价值。引用的主要功能是传
递函数的参数和返回值。C++语言中,函数的参数和返回值的传递方式有三种:值传递、
指针传递和引用传递。
以下是“值传递”的示例程序。由于Func1函数体内的x是外部变量n的一份拷贝,
改变x的值不会影响n,所以n的值仍然是0。
voidFunc1(intx)
{
x=x+10;
}
intn=0;
Func1(n);
cout<<“n=”<<n<<endl;//n=0
以下是“指针传递”的示例程序。由于Func2函数体内的x是指向外部变量n的指
针,改变该指针的内容将导致n的值改变,所以n的值成为10。
voidFunc2(int*x)
{
(*x)=(*x)+10;
}

intn=0;
Func2(&n);
cout<<“n=”<<n<<endl;//n=10
以下是“引用传递”的示例程序。由于Func3函数体内的x是外部变量n的引用,x
和n是同一个东西,改变x等于改变n,所以n的值成为10。
voidFunc3(int&x)
{
x=x+10;
}

intn=0;
Func3(n);
cout<<“n=”<<n<<endl;//n=10
对比上述三个示例程序,会发现“引用传递”的性质象“指针传递”,而书写方式象
“值传递”。实际上“引用”可以做的任何事情“指针”也都能够做,为什么还要“引用”
这东西?
答案是“用适当的工具做恰如其分的工作”。
指针能够毫无约束地操作内存中的如何东西,尽管指针功能强大,但是非常危险。
就象一把刀,它可以用来砍树、裁纸、修指甲、理发等等,谁敢这样用?
如果的确只需要借用一下某个对象的“别名”,那么就用“引用”,而不要用“指针”,
以免发生意外。比如说,某人需要一份证明,本来在文件上盖上公章的印子就行了,如
果把取公章的钥匙交给他,那么他就获得了不该有的权利。
----------
摘自『高质量c++编程』



上面解释的这段还挺有意思^_^

你可能感兴趣的:(区别)