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
分享到:
相关推荐
函数参数与函数调用 1、函数调用的作用: ·用实参数向形式参数传递数据; ·为获得数据参数及在函数体中声明的变量分配存储空间; ·中断现行(调用)函数,把流程向被调用函数的入口处,开始执行被调...
c# 调用C++编写 的DLL函数各种参数传递问题。数据处理问题等等。
本文主要探讨C/C++语言函数间参数的传值和传地址机制,同时探讨了计算机在调用一个函数时采用什么样的方法来自适应的处理函数中的参数,即函数调用约定.
c#调用C++动态库、执行回调函数,并回传结构体参数数据。vs2017环境编写C#和C++动态库,这个为完整工程例子,可供相关人员学习参考。
完整的C++调用Python脚本源码,包含参数传递和函数返回值处理等,且解决传递中文参数出现乱码等问题
也许你从书上了解到了C++的函数参数和返回值类型有类对象,引用,指针。 但是却不知道在内存中到底是怎么回事。本文档从内存堆栈分别揭示了这6种情况下到底在这个过程中发生了什么事情。
remote-function是一个跨进程通讯库,它可以像调用本进程函数一样调用另外一个进程的函数。 remote-function支持调用普通函数,也支持调用类的成员函数。 remote-function底层使用命令管道进行通讯,内置的流程完成...
golang调用c++DLL返回值为char*参数为const char*,读取返回DLL返回值,传递char*型参数
函数的定义和函数原型 函数调用和参数传递机制 函数重载 存储类别和作用域 递归函数设计和函数的递归调用 预处理指令
C#调用C++编写的DLL函数各种参数传递
C#调用C++的dll实例,回调函数,string和int数组参数传递,在vs2010下调试通过,总结在这里,供大家参考。
函数进行参数传递,是在栈空间里为形参分配空间,并将计算各个实参的表达式的值,...根据函数的参数传递的不同,函数调用可以分为函数的值传递调用(传值调用)、函数的指针传递调用(传址调用)和函数的引用传递调用。
定时器事件的响应函数,即 VOID CALLBACK TimerProc() 不是由用户程序自己调用的,而是根据时钟事件借由操作系统内核调用的;那么,如何利用这些形式参数,传递程序逻辑处理所需要的参数呢?本文给出一个解决方案,...
C#调用C++,C++调用Python并传参,包括C++向python传递图片数据,C++向python传递组数据,C++向python传递字符串数据,C++向python传递结构体数据,C++初始化python类数据并调用方法,实际案例,能直接运行,需要安装...
函数参数与函数调用 1、函数调用的作用: ·用实参数向形式参数传递数据; ·为获得数据参数及在函数体中声明的变量分配存储空间; ·中断现行(调用)函数,把流程向被调用函数的入口处,开始执行被调...
在项目开发时,要调用C++封装的DLL,普通的类型C#上一般都对应,只要用DllImport传入从DLL中引入函数就可以了。但是当传递的是结构体、结构体数组或者结构体指针的时候,就会发现C#上没有类型可以对应。这时怎么办,...
c#调用c++ dll 传参 string 崩溃的一种解决办法
1. 不返回值的参数 C++ 原型: bool SendNewSms(char *szTel, char *szMessage); C#引用; [DllImport( CdmaCard.dll,EntryPoint=SendNewSms)] public static extern bool SendNewSms(string ...
我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理、用... 使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数
c++编写的动态链接库,函数的参数为结构体地址,将结构体改为C#版本,使用C#调用dll,成功实例。