设为首页 加入收藏

TOP

7.5.2 关系运算
2013-10-07 01:12:25 来源: 作者: 【 】 浏览:74
Tags:7.5.2 关系 运算

7.5.2  关系运算

指针之间除了可以进行减运算外,还可以进行关系运算。指针的关系运算是比较地址间的关系,这包括两方面:一方面是判断指针是否为空,另一方面是比较指针的相对位置。进行关系运算的两个指针必须具有相同的类型。有相同类型的两个指针p1和p2,则p1和p2间的关系运算式如下所示。

p1==p2:判断p1和p2是否指向同一个内存地址;

p1>p2:判断p1是否处于比p2高的高地址内存位置;

p1>=p2:判断p1是否处于不低于p2的内存位置;

p1<p2:判断p1是否处于比p2低的低地址内存位置;

p1<=p2:判断p1是否处于不高于p2的内存位置。

以上5种是判断两个指针之间的比较,下面两种是判断指针是否为空。

p1==0:判断p1是否是空指针,即什么都不指;

p1==NULL:含义同上;

p1!=0:判断p1是否不是空指针,即指向某个特定地址;

p1!=NULL:含义同上。

注意:C++(www.cppentry.com)标准中并没有规定空指针必须指向内存中的什么地方,具体用什么地址值来表示空指针取决于系统的实现。因此,NULL并不总等于0。这就存在了零空指针和非零空指针两种,但是C++(www.cppentry.com)倾向于使用零空指针。

上述4种都是判断指针与空指针之间的关系,这在通过指针遍历链表、数组等连续内存单元时很有用,可以作为遍历终止的条件。

【示例7-14】 演示指针的关系运算。

  1. int main()  
  2. {  
  3.     int *pInt1;  
  4.     int *pInt2;  
  5.  
  6.     pInt1=new int[5];                   //申请5个内存单元  
  7.     cout<<"pInt1 : "<<pInt1<<endl;      //输出首地址  
  8.     pInt2=pInt1;  
  9.     cout<<"pInt2 : "<<pInt2<<endl;      //输出首地址  
  10.     /*指针比较*/ 
  11.     cout<<"pInt1==pInt2 : "<<(pInt2==pInt1)<<endl;        
  12.     cout<<"pInt1>pInt2 : "<<(pInt2>pInt1)<<endl;          
  13.  
  14.     pInt2++;                                //下移指针  
  15.     cout<<"pInt2 : "<<pInt2<<endl;      //输出首地址  
  16.     /*指针比较*/ 
  17.     cout<<"pInt1==pInt2 : "<<(pInt2==pInt1)<<endl;  
  18.     cout<<"pInt2>pInt1 : "<<(pInt2>pInt1)<<endl;  
  19.     cout<<"pInt2==NULL : "<<(pInt2==NULL)<<endl;  
  20.     /*释放*/ 
  21.     delete[] pInt1;  
  22.     /*置空*/ 
  23.     pIn1=0;  
  24.     pInt2=0;  
  25.     return 0;  

该示例可能的输出如下所示。

  1. pInt1 : 0x3e3f70  
  2. pInt2 : 0x3e3f70  
  3. pInt1==pInt2 : 1  
  4. pInt1>pInt2 : 0  
  5. pInt2 : 0x3e3f74  
  6. pInt1==pInt2 : 0  
  7. pInt2>pInt1 : 1  
  8. pInt1==NULL : 0 

分析:该示例定义了两个整型指针变量pInt1和pInt2,用new运算符给pInt1分配了可存放5个整型数据的内存单元。申请时使用了do…while循环,循环的出口条件是"pInt1==0"。这表示通过判断pInt1是否为空,从而判断是否成功申请到内存空间。如果为空,表明申请失败,继续申请,直至申请成功为止。申请成功后,将pInt1的值赋给了pInt2,从输出结果可看出,两者指向了同一个内存单元。因此,判等运算输出为1,判断pInt1是否地址比pInt2高输出0。

接下来,pInt2移动了一个位置,从输出可以看出,地址增加了4个字节,恰是一个int型数据的长度。然后再次对pInt1和pInt2判等,显然两者不等,故输出0。但显然pInt2在比pInt1高的位置上,故下一个比较输出了1。最后判断pInt1是否是空指针,输出0。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇7.6 指针的指针 下一篇7.5.1 算术运算

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: