void process(A a){}
当process发生调用时,如
A b;
process(b);
这个时候发生的故事,是b的值(此时是对象值)复制,
将该对象传给process, 因此process中的改变,对b没有影响。
----我们喜欢将这个归结为值传递。
void process(A* a){}
发生调用A b;
process(&b);
这个时候发生的故事,是&b的值(b的地址)赋值,
该地址传给Process, process中,通过地址,找到对象,并改变原对象。
所以,b发生改变。
----我们喜欢将其归结为传引用。
其实永远都是传值,但函数中操作的方式不同,所以才造成对象是否能变化的问题。
打个比方,有人给你寄了包裹,包裹(对象)寄到了邮局(对象地址),然后邮政人员打印了一份取包裹的通知(上面有包裹对象的地址),这个时候,包裹通知总要留一份存根吧!写通知垫在底下的复印纸,而你就是取包裹的function,收到也仅仅只是通知的复印件,但你根据上面的地址操作打开包裹,操作包裹,当然会对这个包裹产生作用。
假如是第一种情况的调用, 包裹传递给function的时候,会被复制一份,操作的不再是原来的东西.
函数传参只有一种方式:复制一份,并传值。究竟是操作原来的对象,还是值对象,就看函数怎么利用传入过来的值了,如果是通过地址找对象,当然对原来的对象产生了影响,否则,将不影响原来的对象。
所以,写函数的时候,不要将对象作为参数,否则,栈的资源消耗会非常严重。 当然,除非有必要这样做。
分享到:
相关推荐
c#调用c++ dll 传参 string 崩溃的一种解决办法
将多个变量放到一个结构体中,减少函数传递时的多个参数传进传出的复杂性 结构体传进函数时,是以引用的形式传入的,不是以指针的形式。
c# 调用C++编写 的DLL函数各种参数传递问题。数据处理问题等等。
C#调用C++,C++调用Python并传参,包括C++向python传递图片数据,C++向python传递组数据,C++向python传递字符串数据,C++向python传递结构体数据,C++初始化python类数据并调用方法,实际案例,能直接运行,需要安装...
c#调用C++动态库、执行回调函数,并回传结构体参数数据。vs2017环境编写C#和C++动态库,这个为完整工程例子,可供相关人员学习参考。
定时器事件的响应函数,即 VOID CALLBACK TimerProc() 不是由用户程序自己调用的,而是根据时钟事件借由操作系统内核调用的;那么,如何利用这些形式参数,传递程序逻辑处理所需要的参数呢?本文给出一个解决方案,...
主要介绍了C/C++函数参数传递机制详解及实例的相关资料,需要的朋友可以参考下
NDK开发时,C/C++调用Java的函数的一些案例; 传递int类型参数: https://blog.csdn.net/niuba123456/article/details/80978500 传递String类型参数: https://blog.csdn.net/niuba123456/article/details/80978916 ...
//值传递 void printStufdent1(struct Student st3) { cout << 子函数 << endl; st3.age = 100; cout << 名字: << st3.name << 年龄: << st3.age << 分数:
c++编写的动态链接库,函数的参数为结构体地址,将结构体改为C#版本,使用C#调用dll,成功实例。
C++ 原型: bool SendNewSms(char *szTel, char *szMessage); C#引用; [DllImport( CdmaCard.dll,EntryPoint=SendNewSms)] public static extern bool SendNewSms(string phone,string msg); ...
在上一个继承、派生实验基础上进行扩展优化...设计成为虚函数,在之前的基础上优化捕食等虚函数,捕食的依赖关系设计中传参考虑传递基类指针和基类引用,使得其扩展性更强。(压缩包是整体代码,复制到对应类上即可)
14.7.5 函数传参实例五——判断数组排列方式后执行不同的函数 14.8 数组在对象中的传参 14.9 对象数组 14.10 在对象数组中初始化成员变量 14.11 指针数组 14.12 枚举常量与数组 14.13 多维数组 14.14 多维数组的初始...
14.7.5 函数传参实例五——判断数组排列方式后执行不同的函数 14.8 数组在对象中的传参 14.9 对象数组 14.10 在对象数组中初始化成员变量 14.11 指针数组 14.12 枚举常量与数组 14.13 多维数组 14.14 多维...
C/C++的函数中传递多维数组的各种方法,包括数组和指针的各种用法.
主要介绍了C++11/14 线程调用类对象和线程传参的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
cpp代码-C++:初始化列表:2.向构造函数传递参数
在项目开发时,要调用C++封装的DLL,普通的类型C#上一般都对应,只要用DllImport传入从DLL中引入函数就可以了。但是当传递的是结构体、结构体数组或者结构体指针的时候,就会发现C#上没有类型可以对应。这时怎么办,...
基于MFC对话框类创建的线程,传递给线程函数2个参数,线程函数调用窗口类控件操作等。
一般是函数内部修改参数而又不希望影响到调用者的时候会采用值传递。 指针传递 形参是指向实参地址的一个指针,顾名思义,在函数中对形参指向的内容操作,实参本身会被修改。 引用传递 在 C++ 中,引用是变量的别名...