指针和引用的比较
2013-03-18 15:47
330 查看
总述
使用引用(reference)和指针(pointer)都可间接访问另一个值,
但它们之间存在两个重要区别:
(1)引用总是指向某个确定对象(事实上,引用就是该对象的别名、外号),定义引用时没有进行初始化会出现编译错误;
(2)赋值行为上存在差异:
给引用赋值修改的是该引用所关联癿对象的值,而不是使该引用与另一个对象关联。引用一经初始化,就始终指向同一个特定对象(这就是为什么引用必须在定义时初始化的原因)。
给指针赋值修改的是指针对象本身,也就是使该指针指向另一对象,指针在不同时刻可指向不同的对象(叧要保证类型匹配)。
简单的举两个程序段作为例子。
第一个程序段将一个指针赋给另一指针:
赋值结束后,pi 所指向的 val 对象值保持不变,赋值操作修改了 pi 指针的值,使其指向另一个不同的对象。
编译运行后,输出结果如下(本人使用的是cygwin):
第二个程序段,使用两个引用赋值(为了作比较,上一段代码保留在其中):
这个赋值操作修改了 ri 引用的值 val3 对象,而并非引用本身。赋值后,这两个引用还是分别指向原来关联的对象,此时这两个对象的值相等。编译运行后,输出结果如下:
(PS:关于“赋值后,这两个引用还是分别指向原来关联的对象”这一点,暂时还没想到怎么通过输出终端显示出来。。。
囧,等想到办法了在补上来。。。)
使用引用(reference)和指针(pointer)都可间接访问另一个值,
但它们之间存在两个重要区别:
(1)引用总是指向某个确定对象(事实上,引用就是该对象的别名、外号),定义引用时没有进行初始化会出现编译错误;
(2)赋值行为上存在差异:
给引用赋值修改的是该引用所关联癿对象的值,而不是使该引用与另一个对象关联。引用一经初始化,就始终指向同一个特定对象(这就是为什么引用必须在定义时初始化的原因)。
给指针赋值修改的是指针对象本身,也就是使该指针指向另一对象,指针在不同时刻可指向不同的对象(叧要保证类型匹配)。
简单的举两个程序段作为例子。
第一个程序段将一个指针赋给另一指针:
#include <iostream> using namespace std; int main(void) { int val = 1204, val2 = 2048; int *pi = &val, *pi2 = &val2; pi = pi2; cout << " *pi= " << *pi << "\n"<<endl; cout << " pi= " << pi << "\n"<<endl; cout << " *pi2= " << *pi2 << "\n" <<endl; cout << " pi2= " << pi2 << "\n" <<endl; return 0; }
赋值结束后,pi 所指向的 val 对象值保持不变,赋值操作修改了 pi 指针的值,使其指向另一个不同的对象。
编译运行后,输出结果如下(本人使用的是cygwin):
第二个程序段,使用两个引用赋值(为了作比较,上一段代码保留在其中):
#include <iostream> using namespace std; int main(void) { int val = 1204, val2 = 2048; int *pi = &val, *pi2 = &val2; pi = pi2; cout << " *pi= " << *pi << "\n"<<endl; cout << " pi= " << pi << "\n"<<endl; cout << " *pi2= " << *pi2 << "\n" <<endl; cout << " pi2= " << pi2 << "\n" <<endl; cout << "compare the pointer and reference \n" << endl; int val3 = 3072, val4 = 4096; int &ri = val3, &ri2 = val4; ri = ri2; cout << " ri= " << ri << "\n"<<endl; cout << " &ri= " << &ri << "\n"<<endl; cout << " ri2= " << ri2 << "\n" <<endl; cout << " &ri2= " << &ri2 << "\n" <<endl; return 0; }
这个赋值操作修改了 ri 引用的值 val3 对象,而并非引用本身。赋值后,这两个引用还是分别指向原来关联的对象,此时这两个对象的值相等。编译运行后,输出结果如下:
(PS:关于“赋值后,这两个引用还是分别指向原来关联的对象”这一点,暂时还没想到怎么通过输出终端显示出来。。。
囧,等想到办法了在补上来。。。)
相关文章推荐
- 指针的引用与正常指针 释放内存的另一例比较
- 引用与指针的比较
- C++引用与指针的比较
- C++引用与指针的比较
- c++的中的指向类的指针和引用的比较
- [C++]指针和引用的比较小结
- 指针的引用与正常指针 释放内存的另一例比较
- 指针和引用的比较
- 指针和引用的比较
- 引用指针引用与指针的比较
- 指针与引用的比较
- C/C++中static关键字作用总结 && 指针与引用的比较
- C++引用与指针的比较
- 高质量C++/C程序设计指南(4)--引用和指针的比较
- 引用与指针的比较
- c/c++指针详解(三)----指针和引用的比较
- C++引用与指针的比较
- 比较c++中的值传递,引用传递,指针传递
- 指针形参,引用变量,普通变量比较
- C++ Primer学习笔记(7)——指针形参和引用形参的比较