多操作符的语义判断(如 int& *a和int* &a)

C++语言经常会有涉及到多操作符的变量或者数组定义,怎么判断其语义着实让人费解,下面谈谈我的个人理解。    

首先用一个小小的测试程序:  

#include <iostream.h> 

 void main()

 {  

int intOne = 6; 

 int& rInt=intOne;  

  int *pp=&intOne; 

 // int& *p = &intOne; //编译错误,不能定义指向引用的指针; 

 // int& *p = &rInt; //编译错误,同样不能定义指向引用的指针;

int* &p = pp;   //编译正确,可以定义指针的应用   

cout<<intOne<<endl;//输出为6  

 cout<<rInt<<endl; //输出为6  

cout<<intOne<<"  "<<&intOne<<endl;   

cout<<*pp<<"  "<<pp<<endl;  

cout<<*p<<"  "<<p<<endl;//输出同上两行,地址为intOne的地址  

 }         

  上面的测试程序很简单,容易混淆的地方在于int & * p和int * & p的区别。这两种表达式无外乎两种含义:指向引用的指针和引用指针的引用。

  通过实验结果可以看出,后一种的是正确的,而前一种是错误的。我们知道引用变量可以引用指针和常规变量,而指针不可以指向应用。实验结果说明后面一种是引用指针的引用。  

  我是这样理解的: 既然实验结果表明 int * &p是一个引用,那么我们可以这样理解:上述表达式可以这样写  

(int *)(&p):(&p)表明这是一个引用,(int*)表明这是应用指针变量的引用。对比一下: 

 int *a=int (*a):(*a)表明a是一个指针,int 表明这是一个指向int 的指针;  

int &a=int (&a):(&a)表明a是一个引用,int 表明这是一个引用int 的引用;  i

nt *a[5]:(int *)(a[5]) a[5] 表明定义的是一个数组,int *表明定义的是一个成员为指针的数组。  

上述例子表明当有多个操作符修饰变量时,变量和最后的一个组合,前一个和类型说明符组合,然后再来分析语义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hober.z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值