注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Aspirer's blog

停止维护,新博客地址:http://aspirer.wang/

 
 
 

日志

 
 

C++中传递一个指针和传递一个指针的引用的区别  

2009-03-29 20:20:27|  分类: 学习心得 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

C++中传递一个指针和传递一个指针的引用的区别 - aspirer - Aspirers blog

/*
*MyList.h;实现基本的链表操作;
*/

#ifndef MYLIST_H
#define MYLIST_H
#include <iostream>
#include <string>

class Person
{
private:
 char *name, sex ;
 unsigned short int age ;
 Person *next ;
public:
 Person( char *n, char s, unsigned short int a, Person *p = NULL )
  
 {
  sex =  s  ; age = a  ; next = p ;
  name = new char[strlen( n ) + 1] ;
  strcpy( name,  n ) ;
 }

 ~Person()
 {
  delete []name ;
 }

 Person * &n( )
 {
  return this->next ;
 }


 void disp()
 {
  std::cout << "name:" << name
   << "\tsex:" << sex
   << "\tage:" << age
   << std::endl ;
 }


 Person * insert_after_this( Person &aNewP )
 {
  Person *temp = this->next ;
  this->next = &aNewP ;
  aNewP.next = temp ;
  return &aNewP ;
 }
 
 void remove_this( Person *h )
 {
  while ( h->next != this )
  {
   h = h->next ;
  }  
  h->next = this->next ;

 }
 


} ;


#endif



/*
*MyList.cpp;测试链表基本操作;
*/

#include "MyList.h"

int main()
{
 Person w( "wangp", 'M', 24  ) ; 
 
 Person c( "chel", 'M', 24, &w ) ; 
 
 Person Head( "head", 'M', 33, &c ) ;

 Person *h = &Head ;
 
 Person nn( "test", 'A', 255 ) ;
 w.n() = &nn ;

 while ( h )
 {
  h->disp() ;
  h = h->n() ;
 }

 h = &Head ;
 std::cout << "after remove ! \n" ;
 nn.remove_this( h ) ;
 while ( h )
 {
  h->disp() ;
  h = h->n() ;
 }
 h = &Head ;
 std::cout << "after w insert nn ! \n" ;
 w.insert_after_this( nn ) ;
 while ( h )
 {
  h->disp() ;
  h = h->n() ;
 }

 return 0 ;
}

 

注意红色字体部分,如果把头文件里面的红色字体部分的函数改为

 Person * n( )
 {
  return this->next ;
 }

这样主函数里面的红色字体部分就会出问题,

编译时会报错:=左边必须为左值!

这就是返回指针和返回指针的引用的区别。

返回指针,我们可以更改指针指向的地址所保存的内容;

返回指针的引用,我们可以更改指针本身,和指针指向的地址的内容;

指针的引用   等于   指针的指针 !

 因此还可以将Person *&改为Person **;

不过主函数里面的while语句里的h = h->n() 要改为h = *(h->n()) ;

 w.n() = &nn ;要改为 *w.n() = &nn ;

这一点或许就是*&和**的区别吧!

 

更详细的解释见:

http://topic.csdn.net/t/20021018/13/1106631.html

 

  评论这张
 
阅读(450)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018