C++ 中指针和引用有什么区别详解
1、取地址时,指针有自己的地址,而引用的地址与它引用的变量相同,即引用本身没有地址或说无法获取它的地址;
2、指针可以改变它指向的变量的值,引用也可以改变它引用的变量的值;
3、对于一般指针(不是声明为type * cosnt pt;),可以使它指向另一个变量,即把另一个变量的地址赋给它,即pt=&another;,先前已有pt=&this;而对于引用r,执行r=another;是改变它引用的变量的值;
4、引用必须在声明时初始化,即使它引用一个变量,且一旦引用了一个变量以后,就永远引用这个变量,不能再引用其它变量;
#include
#include
#include
using namespace std;
int main(int argc,char *argv[])
{
int a=1,b=2,c=3,*pt=&a,&r=b;
int * const pt2=&a;
int const *pt3=&a;
//1
printf("&a=%x,&pt=%x\n",&a,&pt); //不同
printf("&b=%x,&r=%x\n",&b,&r); //相同,都是b的地址
printf("\n");
//2
*pt=11;
r=22;
printf("%d,%d\n",a,*pt); //11,11
printf("%d,%d\n",b,r); //22,22
printf("\n");
//3
//pt2=&b; //错误
pt=&b;
printf("%d,%d\n",a,*pt); //11,22,pt现在指向b,因此*pt输出22
r=a;
printf("%d,%d\n",b,r); //11,11,注意当把r赋值为a后,r引用的变量b的值也改变了
//4
//int &r2; //错误,'r2' declared as reference but not initialized
//r=&c; //错误,r已经引用了变量b,不能再引用其它变量或不能把int*转换为int
system("PAUSE");
return EXIT_SUCCESS;
}
指针,全称为指针变量,是用来存储内存地址的一种变量。程序中,一般通过指针来访问其指向的内存地址中的内容(数据)。
引用,是C++中提出来的一种新的使用变量的方式,即,给实际变量起个别名,通过这个别名来引用实际的变量。标准C中不支持变量的引用。
这两个概念没有任何相关性。
指针是实实在在的变量,有自己的内存存储空间,它可以指向任何有效的变量。
引用是一种形式、方法,定义的引用变量,实际上是原实际变量的另一个名称(别名),引用变量本身没有自己的实际存储空间,操作引用变量,就是在操作实际变量。
如:
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!