在比较指针和引用前,我们先了解一下这两个东东是个什么
1.指针:维基百科是这样解释,指针是编程语言中的一类数据类型及其对象或变量,用来表示或存储一个存储器地址,这个地址的值直接指向(points to)存在该地址的对象的值。- 简单地说它其实就是用来放地址的,你把一个数据的地址给它,你就能通过这个指针中的地址找到这个数据。
- 所以可以说指针本质就地址,通过对它,你就能直接对内存中的数据直接进行操纵,这也是C和C++相对于其它语言来说运行速率较快的本质之一。
#include二、引用 1.引用:引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 2.代码解释示例int main() { int a = 10; //定义整型变量a //1、指针的定义 //定义一个没有初始化的指针,p指向随机地址 //int * 定义一个整形指针,在定义指针时,*号是指针的标志 int * p; //指针变量赋值 p = &a; //指针指向变量a的地址 std::cout << &a << std::endl; //打印数据a的地址 std::cout << p << std::endl; //打印指针变量p //输出的两个结果是一样的,因为指针就是地址 //2、指针的使用 //下面*p这个操作叫解引用 //简单理解为解析p指向的地址所存储的值 std::cout << "*p = " << *p << std::endl; //*p = 10 return 0; }
#include三、两者的相同点和不同点 1.相同点int main() { int a = 10; //引用的定义 //下面语句可以理解为把b的地址取出,换成a的地址 int &b = a; // int &b = 10;错误,定义时不能等于实参## // int &c;错误,引用定义时需要给它赋值 std::cout << "a = " << a << std::endl; std::cout << "&b = " << &b << std::endl; //输出结果第一个输出a的值,第二个输出b的地址,也是a的地址,用16进制表示 // b = 100; // std::cout << "a = " << a << std::endl; // std::cout << "b = " << b << std::endl; return 0; }
- 两者本质上都是指针,指针指向的内容都是地址,引用的本质在c++内部实现是一个指针常量.
- 引用初始化后,指向不能变,但指向的值能够改变,其实就是指针常量,而指针以改变指向也可以改变指向的值。
- 引用使用时无需解引用(*),指针需要解引用,引用跟本尊一样用就行
- 引用不能为空,指针可以为空
- 指针和引用的自增运算意义不一样,指针是对地址移动,而应用对数值加一
- 程序为指针变量分配内存区域,而引用不需要分配内存区域



