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

简介: 关于C++引用做为函数参数和指针作为函数参数 个人感觉引用和指针有着很多相识的地方 参考http://blog.itpub.net/7728585/viewspace-2113049/ 我们这里编写两段函数如下: 1、   AT_NAME &...

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

相关文章
|
1天前
|
存储 程序员 C++
深入解析C++中的函数指针与`typedef`的妙用
本文深入解析了C++中的函数指针及其与`typedef`的结合使用。通过图示和代码示例,详细介绍了函数指针的基本概念、声明和使用方法,并展示了如何利用`typedef`简化复杂的函数指针声明,提升代码的可读性和可维护性。
10 0
|
27天前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
49 4
|
1月前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
82 4
|
2月前
|
存储 C语言 C++
如何通过指针作为函数参数来实现函数的返回多个值
在C语言中,可以通过将指针作为函数参数来实现函数返回多个值。调用函数时,传递变量的地址,函数内部通过修改指针所指向的内存来改变原变量的值,从而实现多值返回。
|
2月前
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
2月前
|
存储 搜索推荐 C语言
如何理解指针作为函数参数的输入和输出特性
指针作为函数参数时,可以实现输入和输出的双重功能。通过指针传递变量的地址,函数可以修改外部变量的值,实现输出;同时,指针本身也可以作为输入,传递初始值或状态。这种方式提高了函数的灵活性和效率。
|
2月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
2月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
71 6
|
2月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
32 0
C++ 多线程之线程管理函数
|
2月前
利用指针函数
【10月更文挑战第2天】利用指针函数。
19 1