一、 C++中引用和指针的区别 指针初始化的时候,可以指向一个地址,也可以为空。 引用必须初始化为另一个变量. int ival = 1024; int *pi = &ival; // a pointer int &rval = ival; // a reference
二、 估计很多人在编写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 &nb [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >> |