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

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

 
阅读更多

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

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

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

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

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

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

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

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

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

分享到:
评论

相关推荐

    c/c++中函数调用方式

    在C/C++编程语言中,函数调用方式是程序设计中的关键概念之一,它涉及到如何在函数调用过程中处理参数的传递以及栈空间的管理。根据给定的文件信息,我们可以深入探讨C/C++中几种主要的函数调用方式:__cdecl、__...

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

    C# 调用 C++ 编写的 DLL 函数各种参数传递问题 ...在 C# 调用 C++ 编写的 DLL 函数时,需要根据情况选择合适的参数传递方式,包括不返回值的参数、带返回值的参数、传递结构体指针和传递结构体数组等。

    visual c++中函数调用方式浅探

    ### Visual C++中函数调用方式浅探 在Visual C++环境下进行软件开发时,了解不同的函数调用约定(calling conventions)对于优化程序性能、理解编译器行为以及避免潜在的错误至关重要。本文将深入探讨Visual C++中...

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

    C++动态库中,回调函数是一种特殊的函数,它的指针可以作为参数传递给其他函数,在适当的时候被调用。在C#中,我们将使用委托来表示这个回调函数。C++的回调函数需要考虑函数指针的调用约定,通常使用`__stdcall`...

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

    本文主要探讨了C/C++语言中函数之间的参数传递机制以及计算机如何处理函数调用中的参数,即函数调用约定。文章重点分析了值传递与地址传递这两种主要的参数传递方式,并讨论了不同情况下的最佳实践。 #### 关键词 ...

    剖析C++函数调用约定

    C++函数调用约定是编程过程中非常重要的概念,它规定了函数调用时参数传递的顺序、谁负责清理堆栈以及函数名是否需要修饰。在Visual C/C++编译器中,有四种主要的函数调用约定:__cdecl、__stdcall、__fastcall和...

    关于C++的函数参数传递方式

    本文将深入解析C++中的函数参数传递机制,包括传值调用、传地址调用以及引用调用,并探讨它们之间的区别。 #### 1. 传值调用(Pass by Value) 传值调用是最常见的函数参数传递方式之一。在这种方式下,当调用函数...

    Visual C++中函数调用方式浅探

    Visual C++中函数调用方式浅探 在 Visual C++ 中,函数调用...C 式调用是 C 和 C++ 中默认的函数调用方式,而 Pascal 式调用则是 WINAPI 的一种实现方式。了解这两种调用方式的差异对程序的执行和性能产生重要影响。

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

    3. **P/Invoke**:使用C#的`DllImport`特性来导入C++的DLL,并定义对应的函数调用。 ```csharp [DllImport("YourDllName.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void ...

    关于C和C++中函数的调用约定.doc

    当混合使用C和C++代码,或者在C++程序中调用第三方非C++库时,这些问题尤为突出。本文将详细阐述这两种语言的调用约定和修饰规则,以及它们可能导致的常见问题。 函数调用约定定义了函数参数如何入栈、谁负责清理...

    c++中参数传递方式讨论

    在C++编程语言中,参数传递是函数调用过程中一个至关重要的概念,它决定了函数如何接收外部传入的数据。根据给定的文件信息,我们将深入探讨C++中的三种主要参数传递方式:值传递、指针传递和引用传递,并分析它们的...

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

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

    C++ 调用带参数EXE

    在C++编程中,调用带有参数的外部可执行文件(EXE)是常见的需求,尤其是在集成多个组件或工具的项目中。以下是一些主要的方法: 1. **使用`system`函数** `system`函数来自C标准库,原型为`int system(const char...

    C、C++函数参数传递方式.pdf

    这些方式决定了参数在函数调用时的传值行为,以及它们在函数执行后是否能够影响原始数据。下面详细解释这些传递方式的知识点。 1. 值传递(Call by Value) 值传递是最常见也是最基本的参数传递方式。在值传递中,...

    c++调用dll ,指针结构体参数传递

    c++调用dll ,指针结构体参数传递,--改造了csdn 上的一个程序。

    C#调用C++动态库中自身定义的回调函数

    本主题将详细探讨如何在C#应用程序中调用C++动态链接库(DLL)中的函数,并且在这个过程中,C#能够注册和处理C++库中定义的回调函数。 首先,让我们理解回调函数的概念。回调函数是一种设计模式,允许将一个函数的...

    函数调用的信息传递

    函数调用时,信息传递是连接实际参数(caller侧的变量)和形式参数(callee侧的变量)的关键机制。这里有三种主要的信息传递方式:传值调用、传址调用和引用调用,每种方式都有其独特的特性和应用场景。 1. **传值...

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

    根据给定文件的信息,我们可以深入探讨C++中函数调用时参数传递与返回值的不同方式,特别是当涉及类对象、引用以及指针时的具体实现细节。以下是对这六种情况的详细解析: ### 1. 按值传递类对象 在函数调用时,...

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

    本文将深入探讨如何从C#中调用C++编写的DLL(动态链接库)函数,并通过具体的例子来说明不同类型参数的传递方式。 ### 一、字符串参数传递 C#调用C++ DLL函数时,最常见的一种情况是处理字符串参数。例如,考虑...

Global site tag (gtag.js) - Google Analytics