`
yeshaoting
  • 浏览: 684295 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C++函数的调用与参数传递

 
阅读更多


C++函数的调用与参数传递


根据函数参数传递的不同方式分 :

1. 函数传值调用

2. 函数传址调用

3. 函数引用调用



1、传值调用 

函数传值调用是将实参的值传递给形参,形参和实参各自具有单独的存储空间,因此改变形参的值时,实参的值不会受到任何影响。

值传调用多用在不需要被调用函数改变实参的值的场合。实参可以是常量、变量或表达式,被调用函数的形参必须用变量,不能是指针或引用。


示例代码:

...
void DataDouble(int x,int y);
int main()
{
	int x,y;
	x=10;
	y=5;
	DataDouble(x,y);    //传值调用
	cout<<"in main()  "<<"x="<<x<<";"<<"y="<<y<<endl;
	return 0;
}
void DataDouble(int x,int y)
{
	x=x*2;
	y=y*2;
	cout<<"in DataDouble() "<<"x="<<x<<";"<<"y="<<y<<endl;
}
 


执行该程序,输出以下结果:

in DataDouble()  x=20;y=10

in main()  x=10;y=5



2、传址调用 

传址调用则传递的是变量的存储地址。实参是地址值,用地址常量或指针变量表示,形参是指针变量。函数调用时系统将实参所表示的地址值赋给形参的指针变量,从而使得形参和实参的指针指向的是相同的存储地址。在被调用函数中,可以通过形参指针改变其所指向的元素。

传址调用的实现机制就是可以通过改变形参所指向的变量值来影响实参。 



示例代码:

...
void DataDouble(int *x,int *y);
int main()
{
	int x,y;
	x=10;
	y=5;
	DataDouble(&x,&y);        //实参传递的是地址值
	cout<<"in main()  "<<"x="<<x<<";"<<"y="<<y<<endl;
}
void DataDouble(int *x,int *y)     //形参用指针
{
	*x=(*x)*2;        //对指针所指向的存储空间的值×2
	*y=(*y)*2;
	cout<<"in DataDouble()  "<<"x="<<*x<<";"<<"y="<<*y<<endl;
}
 


执行该程序,输出以下结果:

in DataDouble()  x=20;y=10

in main()  x=20;y=10



3、引用调用

使用函数的引用调用时,函数的实参用变量名,形参是引用类型。函数调用时,实参给形参赋值,对引用进行了初始化,引用是实参的别名。在被调用函数中,可以通过引用间接访问被引用的变量,所有在引用上施加的操作,实质上就是施加在被引用变量上的操作。

引用调用可以通过形参引用改变被调用函数中被引用的实参变量的值。


示例代码:

...
void DataDouble(int &rx,int &ry);
int main()
{
	int x,y;
	x=10;
	y=5;
	DataDouble(x,y);
	cout<<"in main()  "<<"x="<<x<<";"<<"y="<<y<<endl;
	return 0?;
}
void DataDouble(int &rx,int &ry)  //形参是引用
{
	rx=rx*2;
	ry=ry*2;
cout<<"in DataDouble() "<<?"rx="<<rx<<";"<<"ry="<<ry<<endl;
}
 


执行该程序,输出以下结果:

in DataDouble()  x=20;y=10

in main()  x=20;y=10


http://wenku.baidu.com/view/4dbe44f77c1cfad6195fa75d.html

分享到:
评论

相关推荐

    剖析C++函数调用约定

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

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

    C# 调用 C++ 编写的 DLL 函数各种参数传递问题 在 C# 调用 C++ 编写的 DLL 函数时,参数传递是一个非常重要的部分。这篇文章将详细介绍 C# 调用 C++ 编写的 DLL 函数各种参数传递问题,包括不返回值的参数、带...

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

    ### C/C++语言函数参数传递及函数调用约定的探讨 #### 摘要 本文主要探讨了C/C++语言中函数之间的参数传递机制以及计算机如何处理函数调用中的参数,即函数调用约定。文章重点分析了值传递与地址传递这两种主要的...

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

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

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

    本文将详细探讨如何在C#中调用C++编写的动态链接库(DLL),执行回调函数并传递结构体参数。这涉及到.NET Framework的P/Invoke(Platform Invoke)技术以及对C++内存管理和调用约定的理解。 首先,C#调用C++动态库...

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

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

    C++ 调用带参数EXE

    然而,`system`函数不能直接传递参数给被调用的EXE,也不提供对程序窗口的控制。此外,由于它会创建子进程并等待其结束,所以在多线程程序中可能不是最佳选择。 2. **使用`execl`和`execv`函数** 这些函数属于`...

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

    在编译后的汇编指令中可以看到,参数是通过栈来传递的,并且在函数调用后,由调用者通过增加ESP寄存器的值来清理栈空间。 ```assembly lea eax, [ebp - 8] ; 取m的地址到eax push eax ; 压栈 lea ecx, [ebp - 4] ; ...

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

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

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

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

    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++函数

    因此,当C调用C++函数时,可能需要通过返回值或全局状态来传递错误信息。 总结,C调用C++函数的关键在于创建一个C友好的接口,使用`extern "C"`避免名称修饰,并确保链接过程的兼容性。在QT这样的跨平台框架中,...

    深入剖析C++函数的参数传递机制

    #### C/C++函数调用机制及值传递 在探讨C++中的参数传递机制之前,我们首先需要了解C/C++中的函数调用机制及其基本原理。 ##### 函数调用机制概述 在结构化程序设计中,“自顶向下,逐步细化”是一种常用的设计...

    函数调用的信息传递

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

    C与C++中的函数参数传递机制

    参数传递是指在函数调用过程中,将实参(实际参数)的值传递给形参(形式参数)的过程。根据不同的编程语言,参数传递可以分为按值传递和按引用传递两种主要方式。 - **按值传递**:函数接收的是实参值的副本。这...

    c/C++可变参数函数的参数传递机制剖析

    ### C/C++可变参数函数的参数传递机制剖析 #### 摘要 本文深入探讨了C/C++语言中可变参数函数的参数传递机制,并提出了一种更加精确且灵活的设计方法来处理这类函数。通过分析,我们不仅理解了如何在函数内部访问...

    c++\实验2 C++函数的定义与使用.

    实验二C++函数的定义与使用的目的是学习函数的定义、函数的使用和函数重载,掌握函数的声明、定义和使用,理解函数参数的传递和C++系统函数的调用。 实验设备包括计算机、Windows操作系统和VC++6。 实验内容和步骤...

    c#调用c++的可变参数

    本篇文章将详细探讨如何使用C#调用具有可变参数的C++函数,这对于那些需要利用C++库功能的C#开发者来说至关重要。我们将讨论P/Invoke机制、C#中的平台调用以及如何处理C++的可变参数。 C#是一种类型安全的.NET ...

Global site tag (gtag.js) - Google Analytics