指针与引用的概念和不同

指针与引用的概念和不同

指针的概念:指针就是一个地址变量,有自己的一块空间
指针大小是4个字节

 1. int x = 0;
 2. int *P = &x;
可以看出指针P直接指向变量x的地址,&p是指针的对应地址

引用的概念:变量的别名,不占用内存空间

 1. int x = 0;
 2. int &y = x;
y的地址与x的地址一样,y没有属于自己的地址因此它不占有内存空间

函数的传参可以分为个值传递(不改变内容)和地址传递(改变内容),c++11中也可以用引用作为形参


 1. int A(int &a){	a++;  }
 2. 
 3. int main(){
 4. 	int x = 1;
 5. 	int*p = &x;
 6. 	int& y = x;
 7. 	A(a);
 8. 	A(y);
 9. 	A(*p);
 10.} 

其实指针和引用只是表面上看起来不一样是为了方便使用,在低层实现时,两者是一样的.(把1存储在变量a的地址中,把变量a的地址给到一个地址寄存器中,把地址寄存器中的地址存到指针p的地址中,在汇编的实现中引用和指针是一样的)主流的编译器会把引用解释成const指针

C/C++中指针和引用的区别:

  1. 指针有自己的内存空间,引用只是变量的别名(尽管它们在底层汇编过程的实现一样,在优化编译器中会把对引用进行的计算直接用变量的值进行计算)
  2. 使用sizeof看一个指针的大小就是4,而引用的大小取决于引用对象的类型
  3. 指针可以初始化为NULL,而引用必须被初始化为一个已有对象的引用;
  4. 作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引用的修改会改变引用所指向的对象;(即传参数要传p,如果对p进行加一操作会改变p*所指向的地址)
  5. 可以有const指针,但是没有const引用(const可以指代常变量,常变量不可改变;也可以指代常指针,指针所指向的地址不可以改变)const的使用是先左后右 int * const j;(常指针,值可变,但是指针指向的地址不可变) const int * j;(值不可变但是指针指向的地址可变) const int & x;(不可以通过引用x去改变对象的值)
  6. 指针可以在使用中指向其它对象,但是引用只能是初始化的对象,不能改变
  7. 指针可以有多级指针,而引用止于一级
  8. 指针和引用使用++运算符的意义不一样
  9. 如果返回动态内存分配的对象或内存.必须用指针,引用可能引起内存泄露
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值