关于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。