cpp-指针和引用的区别

复合类型:指基于其他类型定义的类型。c++有几种复合类型,其中最为熟悉的两种就是:引用和指针

 

引用:为对象起了另外一个名字:int a=10, int &b=a; b=15;相当于a=15.

这时b完全代表a,引用并不是对象,只是为一个已经存在的对象起的另外一个名字。

 

引用的定义:int &b=a;

                          int &b=a,&c=a;

 

指针:与引用不同在于:1.指针本身就是个对象,允许对指针赋值和拷贝,而且可以先后指向几个不同的对象。

   2. 指针无需在定义时赋初值。

 

Int *p1, *p2; //p1和p2都是指向int型对象的指针

 

指针存放某个对象的地址,要想获得该地址,需要使用取地址符&

Int a=42;

Int *p=&a; //p存放a的地址,或者说p是指向变量a的指针

 

利用指针访问对象:

如果指针指向了一个对象,可利用解引用符*来访问该对象

Int a=42;

Int *p=&a;

Cout<<*P;//由符号*得到指针p所指的对象,输出42

 

 

指针值:

指针的值(也就是地址)应属下列四种状态之一:

1.指向一个对象

2.指向紧邻对象所占空间的下一个位置

3.空指针,不指向任何对象

4.无效指针

 

指针的赋值就是令其存放一个新的地址,从而指向一个新的对象

Int I =42;

Int *p1=0;

Int *p2=&I;

Int *p3;

 

P3=p2; //p3和p2指向同一个对象i

P2=0; //现在p2不指向任何对象了

 

 

Void* 指针

是一种特殊的指针类型,可用于存放任何对象的地址。

Double a=3.14;

Void *p=&a;

 

利用void*指针能做的事比较有限:

1.作为函数的输入或输出

2.与其它指针比较

3.赋给另一个void*指针

 

 

注意点:

定义多个指针变量时:

正确做法:int *a, *b;

错误做法: int* a, b;

 

造成错误的原因是会误以为int* 作用于a和b两个变量。其实恰恰相反。基本数据类型依然是int而非int*,*仅仅修饰了a而已,对其他变量b不起作用。

但是要注意int* a也是合法的,只是容易产生误导。

 

 

指向指针的指针(双重指针)

一般来说,声明符中修饰符的个数并没有限制(比如*),当多个修饰符连写在一起,按照其逻辑关系解释即可。比如指针,指针是内存中的对象,当然也是有地址的,因此运行将指针的地址再存放到另一个指针。

 

Int a=10;

Int *p1=&a;

Int **p2=&p1; //p2指向一个int的指针

 

解引指向指针的指针会得到一个指针,此时为了访问最原始的对象,需要对指针的指针做两次解引用:

Cout<<**p2

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值