您的位置:首页 > 编程语言 > C语言/C++

C++中指针(pointer)和引用(reference)的区别和联系

2005-04-04 18:57 726 查看
估计很多人在编写C++程序都或多或少的会用到pointer 和 reference这两种东西,但是他们两者到底有什么样的区别和联系呢,相信大多数人是不太了解的,今天我就两者的区别和联系从实际程序的角度来加以区别。
C/C++中的指针其实就是一个变量,和其他类型的变量是一个样子的,它是一个占用四字节的变量(32位机上),它与其他变量的不同之处就在于它的变量值是一个内存地址,指向内存的另外一个地方。reference我的理解就是一个别名,它和linux操作系统上的alias是一个样子的。再者,一个pointer变量可以指向NULL,表示它不指向任何变量地址,但是reference必须在声明的时候就得和一个已经存在的变量相绑定,而且这种绑定不可改变。下面是我写的一段程序来验证pointer与reference的区别和联系的,希望能对大家理解pointer & reference的区别和联系有所帮助:

#include "stdafx.h"
#include <iostream>
using namespace std;


int main(int argc, char* argv[])
{
 int ival = 1024;
 int *pi  = &ival; // a pointer
 int &rval = ival; // a reference
 int jval = 4096;
 int xval = 8192;

 cout << "ival = " << ival << "/t";
 cout << "&ival = " << &ival << "/t";
 cout << endl;
 cout << "pi = " << pi << "/t";
 cout << "&pi = " << &pi << "/t";
 cout << "*pi = " << *pi << "/t";
 cout << endl;
 cout << "rval = " << rval << "/t";
 cout << "&rval = " << &rval << "/t";
 cout << endl;
 cout << "jval = " << jval << "/t";
 cout << "&jval = " << &jval << "/t";
 cout << endl;

 // change the values of the reference and the pointer
 pi = &jval;
 rval = jval;

 // print the changes
 cout << endl;
 cout << "ival = " << ival << "/t";
 cout << "&ival = " << &ival << "/t";
 cout << endl;
 cout << "pi = " << pi << "/t";
 cout << "&pi = " << &pi << "/t";
 cout << "*pi = " << *pi << "/t";
 cout << endl;
 cout << "rval = " << rval << "/t";
 cout << "&rval = " << &rval << "/t";
 cout << endl;
 cout << "jval = " << jval << "/t";
 cout << "&jval = " << &jval << "/t";
 cout << endl;

 cout << endl;
 *pi = xval;
 cout << "pi = " << pi << "/t";
 cout << "&pi = " << &pi << "/t";
 cout << "*pi = " << *pi << "/t";
 cout << endl;
 cout << "jval = " << jval << "/t";
 cout << "&jval = " << &jval << "/t";
 cout << endl;

 return 0;
}

一次的执行结果如下:
ival = 1024     &ival = 0012FF7C
pi = 0012FF7C   &pi = 0012FF78  *pi = 1024
rval = 1024     &rval = 0012FF7C
jval = 4096     &jval = 0012FF70
ival = 4096     &ival = 0012FF7C
pi = 0012FF70   &pi = 0012FF78  *pi = 4096
rval = 4096     &rval = 0012FF7C
jval = 4096     &jval = 0012FF70
pi = 0012FF70   &pi = 0012FF78  *pi = 8192
jval = 8192     &jval = 0012FF70
如果有兴趣的话也可以使用其他类型的变量来测试,并且打印出各个变量占用内存的大小,我在这里就不把具体的程序贴出来了。
如果对上述看法有异议的话欢迎email至andyzhange@yahoo.com.cn 交流一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息