Search This Blog

Thursday, February 25, 2010

C++ 引用和指针的区别

指针和引用有两个主要区别 引用必须总是指向一个对象 如果用一个引用给另一个引 用赋值 那么改变的是被引用的对象而不是引用本身 让我们来看几个例子 当我们这样写
int *pi = 0;
用 0 初始化 pi——即 pi 当前不指向任何对象 但当我们写如下语句时 const int &ri = 0;
在内部 发生了以下转换
int temp = 0; const int &ri = temp;
引用之间的赋值是第二个不同 当给定了以下代码后
int ival = 1024, ival2 = 2048; int *pi = &ival, *pi2 = &ival2;
我们再写如下语句
pi = pi2;
pi 指向的对象 ival 并没有被改变 实际上 pi 被赋值为指向 pi2 所指的对象——在本例中 即 ival2 重要的是 现在 pi 和 pi2 都指向同一对象 这是一个重要的错误源 如果我们把 一个类对象拷贝给另一个类对象 而该类有一个或多个成员是指针 我们将在第 14 章详细讨 论这个问题
但是 假定有下列代码
int &ri = ival, &ri2 = ival2;
当我们写出这样的赋值语句时
ri = ri2;
改变的是 ival
而不是引用本身 赋值之后 两个引用仍然指向原来的对象 实际的 C++程序很少使用指向独立对象的引用类型 引用类型主要被用作函数的形式参数

No comments:

Post a Comment