`
amanhu
  • 浏览: 12318 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

C++中函数调用时的三种参数传递方式

 
阅读更多

在C++中,参数传递的方式是“实虚结合”。

  • 按值传递(pass by value)
  • 地址传递(pass by pointer)
  • 引用传递(pass by reference)

按值传递的过程为:首先计算出实参表达式的值,接着给对应的形参变量分配一个存储空间,该空间的大小等于该形参类型的,然后把以求出的实参表达式的值一一存入到形参变量分配的存储空间中,成为形参变量的初值,供被调用函数执行时使用。这种传递是把实参表达式的值传送给对应的形参变量,故称这种传递方式为“按值传递”。

使用这种方式,调用函数本省不对实参进行操作,也就是说,即使形参的值在函数中发生了变化,实参的值也完全不会受到影响,仍为调用前的值。

如果在函数定义时将形参说明成指针,对这样的函数进行调用时就需要指定地址值形式的实参。这时的参数传递方式就是地址传递方式。

地址传递与按值传递的不同在于,它把实参的存储地址传送给对应的形参,从而使得形参指针和实参指针指向同一个地址。因此,被调用函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。

按值传递方式容易理解,但形参值的改变不能对实参产生影响。

地址传递方式虽然可以使得形参的改变对相应的实参有效,但如果在函数中反复利用指针进行间接访问,会使程序容易产生错误且难以阅读。

如果以引用为参数,则既可以使得对形参的任何操作都能改变相应的数据,又使得函数调用显得方便、自然。引用传递方式是在函数定义时在形参前面加上引用运算符“&”。

分享到:
评论

相关推荐

    c# 调用C++编写 的DLL函数各种参数传递问题。

    c# 调用C++编写 的DLL函数各种参数传递问题。数据处理问题等等。

    C C++语言函数参数传递及函数调用约定的探讨

    本文主要探讨C/C++语言函数间参数的传值和传地址机制,同时探讨了计算机在调用一个函数时采用什么样的方法来自适应的处理函数中的参数,即函数调用约定.

    C#调用C++动态库,执行回调函数并传递结构体参数

    c#调用C++动态库、执行回调函数,并回传结构体参数数据。vs2017环境编写C#和C++动态库,这个为完整工程例子,可供相关人员学习参考。

    C/C++ 函数调用与函数返回值

    函数参数与函数调用  1、函数调用的作用:  ·用实参数向形式参数传递数据;  ·为获得数据参数及在函数体中声明的变量分配存储空间;  ·中断现行(调用)函数,把流程向被调用函数的入口处,开始执行被调...

    C++调用Python脚本

    完整的C++调用Python脚本源码,包含参数传递和函数返回值处理等,且解决传递中文参数出现乱码等问题

    进程间函数调用

    remote-function是一个跨进程通讯库,它可以像调用本进程函数一样调用另外一个进程的函数。 remote-function支持调用普通函数,也支持调用类的成员函数。 remote-function底层使用命令管道进行通讯,内置的流程完成...

    C#调用C++编写的DLL函数各种参数传递

    C#调用C++编写的DLL函数各种参数传递

    golang调用c++DLL传递char*型参数读取返回char*字符串内容

    golang调用c++DLL返回值为char*参数为const char*,读取返回DLL返回值,传递char*型参数

    C++函数调用传参与返回值深度分析

    也许你从书上了解到了C++的函数参数和返回值类型有类对象,引用,指针。 但是却不知道在内存中到底是怎么回事。本文档从内存堆栈分别揭示了这6种情况下到底在这个过程中发生了什么事情。

    C#调用C++的dll实例,回调函数,string和int数组参数传递

    C#调用C++的dll实例,回调函数,string和int数组参数传递,在vs2010下调试通过,总结在这里,供大家参考。

    C++回调函数详解

    我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理、用... 使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数

    向 SetTimer的回调函数传递参数

    定时器事件的响应函数,即 VOID CALLBACK TimerProc() 不是由用户程序自己调用的,而是根据时钟事件借由操作系统内核调用的;那么,如何利用这些形式参数,传递程序逻辑处理所需要的参数呢?本文给出一个解决方案,...

    三种参数传递

    在C++中,参数传递的方式是“实虚结合”。 •按值传递(pass by value) •地址传递(pass by pointer) •引用传递(pass by reference) 按值传递的过程为:首先计算出实参表达式的值,接着给对应的形参变量分配一...

    c#调用c++ dll 传参 string 崩溃的一种解决办法

    c#调用c++ dll 传参 string 崩溃的一种解决办法

    C++ 函数 函数的定义和函数原型 重载

    函数的定义和函数原型 函数调用和参数传递机制 函数重载 存储类别和作用域 递归函数设计和函数的递归调用 预处理指令

    c++禁止函数的传值调用的方法

    按照参数形式的不同,C++应该有三种函数调用方式:传值调用、引用调用和指针调用。对于基本数据类型的变量作为实参进行参数传递时,采用传值调用与引用调用和指针调用的效率相差不大。但是,对于类类型来说,传值...

    C/C++函数调用的几种方式总结

    函数调用时,调用者依次把参数压栈,然后调用函数,函数被调用以后,在堆栈中取得数据,并进行计算。函数计算结束以后,或者调用者、或者函数本身修改堆栈,使堆栈恢复原装。 在参数传递中,有两个重要的问题必须要...

    C++调用Python并传参

    C#调用C++,C++调用Python并传参,包括C++向python传递图片数据,C++向python传递组数据,C++向python传递字符串数据,C++向python传递结构体数据,C++初始化python类数据并调用方法,实际案例,能直接运行,需要安装...

    C#调用C++编写的DLL函数各种参数传递问题

    1. 不返回值的参数  C++ 原型:  bool SendNewSms(char *szTel, char *szMessage);  C#引用;  [DllImport( CdmaCard.dll,EntryPoint=SendNewSms)]  public static extern bool SendNewSms(string ...

    Labview调用C++ dll之字符串数组传递

    Labview调用C++编写的dll实现字符串数组的传递,C++和Labview实现源代码,开发环境:VS2010+Labview2015

Global site tag (gtag.js) - Google Analytics