关于C++引用做为函数参数和指针作为函数参数

关于C++引用做为函数参数和指针作为函数参数

个人感觉引用和指针有着很多相识的地方
参考
http://blog.itpub.net/7728585/viewspace-2113049/
我们这里编写两段函数如下:
1、
  AT_NAME & at_r (AT_NAME & cp,const AT_NAME & in_s)
  {
      cp = in_s;
      return cp;
  }
2、 
  AT_NAME* at_p (AT_NAME *cp , const AT_NAME* in_s)
  {
      *cp = *in_s;
      return cp;
  }                 

第一段完全使用C++引用而后一段完全使用指针,实际上引用和指针都是指向同一个变量的或者说
一段内存。
比如 AT_NAME & cp,const AT_NAME & in_s 实际上不是值的复制而更像是传的地址,返回的的引用
当然也相当于原地址。和指针基本相同。
完整程序如下:
  1 /*************************************************************************
  2     > File Name: yinyong.cpp
  3     > Author: gaopeng
  4     > Mail: gaopp_200217@163.com
  5     > Created Time: Wed 01 Jun 2016 06:09:47 PM CST
  6  ************************************************************************/
  7
  8 #include<iostream>
  9 #include <stdio.h>
 10 using namespace std;
 11
 12
 13 typedef struct att_name
 14 {
 15     char name[10];
 16     unsigned int ages;
 17     unsigned int height;
 18 } AT_NAME;
 19
 20 AT_NAME & at_r (AT_NAME & cp,const AT_NAME & in_s);
 21 AT_NAME* at_p (AT_NAME *cp , const AT_NAME* in_s);
 22
 23 int main(void)
 24 {
 25     AT_NAME a1 = {"颜蕾",28,120};
 26     AT_NAME a2 = {"高鹏",30,170};
 27     AT_NAME a3 = {"高子涵",4,30};
 28
 29     AT_NAME cp1;
 30     AT_NAME cp2;
 31     AT_NAME cp3;
 32     AT_NAME cp4;
 33
 34     at_r( cp1 , a1 );
 35     at_p( &cp2 , &a2 );
 36
 37     at_r(cp3 , a1 ) = a3;
 38     *(at_p( &cp4 , &a2 )) = a3;
 39
 40     printf("%s ,%d ,%d\n",cp1.name,cp1.ages,cp1.height);
 41     printf("%s ,%d ,%d\n",cp2.name,cp2.ages,cp2.height);
 42     printf("%s ,%d ,%d\n",cp3.name,cp3.ages,cp3.height);
 43     printf("%s ,%d ,%d\n",cp4.name,cp4.ages,cp4.height);
 44 }
 45
 46
 47 AT_NAME & at_r (AT_NAME & cp,const AT_NAME & in_s)
 48 {
 49     cp = in_s;
 50     return cp;
 51 }
 52
 53 AT_NAME* at_p (AT_NAME *cp , const AT_NAME* in_s)
 54 {
 55     *cp = *in_s;
 56     return cp;
 57 }

这段程序有2个需要注意的地方
1、at_r(cp3 , a1 ) = a3
   *(at_p( &cp4 , &a2 )) = a3
   这两个方式都可以完成,为什么正确是因为他们都是一段有效结构体内存,然后他们和a3相等是可以完成的。
   完成这个步骤后cp3 = a3 ,cp4 = a3
2、函数都使用了return cp,返回引用或者指针
   比一般的方式比如:
   AT_NAME  at_p ( const AT_NAME* in_s)
   {
     AT_NAME temp;
     temp = *in_s;
     return temp;
   }
   int main(){
   ....
   cp3 = at_p( &a2);
   ....
   }
   比起这种方式直接返回引用或者指针,可以避免建立一个临时变量的内存,效率较高
   这里at_p( &a2)就会建立一个临时变量用于保存函数返回的结构体temp。
  
  
 

上一篇:PolarDB-X 1.0-SQL 手册-函数-转换函数


下一篇:大数据如何支撑更好的商业模式来驱动精细化运营?