`
ostrichmyself
  • 浏览: 38800 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C++函数传参--永远的复制+值传递

阅读更多
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++函数使用的是`const char*`,即ASCII编码的字符串,因此我们需要将`CharSet`属性设置为`CharSet.Ansi`。同时,为了确保C++函数能正确识别参数,还需要设置`CallingConvention`属性为`CallingConvention.Cdecl...

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

    在 C# 中,ref关键字将使得参数被传递给 C++ 函数,并且可以接收返回的值。 4. 传递结构体指针(C++ 填充) 在 C++ 中,函数原型为 BOOL NetGetConnectDetail(NET_INFO_STRUCT *lpNetInfo);,在 C# 中可以使用 ...

    C++ 与C#之间的指针参数传递传参参考

    C++ 与C#之间的指针参数传递,实现无限量数据的传递,轻松无压力,方便在C++里面获取或者从C#传递数据到C++的动态库调用内。

    c++ 使用结构体的引用形式进行函数的传参操作

    将多个变量放到一个结构体中,减少函数传递时的多个参数传进传出的复杂性 结构体传进函数时,是以引用的形式传入的,不是以指针的形式。

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

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

    函数参数的传递

    在C语言中,函数参数的传递主要有三种方式:值传递、地址传递和引用传递。这三种方式各自有不同的特性和应用场景,理解它们的工作原理对于编写高效和正确的程序至关重要。 1. 值传递(Value Passing) 值传递是最...

    C++调用Python并传参

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

    C/C++中多维数组指针作为函数参数传递程序

    C/C++中多维数组指针作为函数参数传递程序 在 C++ 中,多维数组指针作为函数参数传递是非常常见的编程技术。本文将详细介绍如何在 C/C++ 中将多维数组指针作为函数参数传递,並对相关知识点进行详细解释。 多维...

    java 将方法作为传参--多态的实例

    在 Java 中,不能像 C/C++ 一样将函数作为指针传递,但可以使用面向对象的思想,设计一个接口,实现多态的实例。在这个实例中,我们将使用黄金搜索法(Golden Section Search)作为例子,来演示如何将方法作为参数...

    为什么传递进来的参数会自动变为空的?

    在编程过程中,我们可能会遇到一个看似诡异的问题:传递进来的参数在函数内部突然变成空值。这通常是由于各种编程陷阱或者编程语言特定的行为所引起的。在这个案例中,问题与MFC(Microsoft Foundation Classes)...

    C/C++函数参数传递机制详解及实例

    在C/C++编程语言中,函数参数传递机制是编程过程中的一个重要概念,它涉及到函数调用时实参(实际参数)与形参(形式参数)之间的数据交互方式。通常,有以下两种基本的参数传递方式: 1. 值传递(Pass by Value) ...

    Qt中connect函数不能传递参数的两种解决方法 - aRooooooba的博客 - CSDN博客1

    然而,如果需要在`connect`中传递参数,通常的标准语法不支持直接传参。下面我们将详细讨论两种解决方法来解决这个问题。 **方法一:使用槽函数的默认参数** 在C++中,槽函数可以拥有默认参数。这样,即使信号没有...

    向 SetTimer的回调函数传递参数

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

    关于函数中传参的研究

    当我们谈论函数中的参数传递时,涉及到的关键概念包括值传递、引用传递和地址传递。这些不同的传递方式对函数内部操作及程序效率有着直接影响。 1. 值传递(Passing by Value): 值传递是最常见的参数传递方式。当...

    C语言函数参数传递

    值传递是一种将实际参数的值复制给形式参数的过程。在值传递中,函数的形式参数是实际参数的副本,而不是实际参数本身。 让我们通过考题一来理解值传递。 考题一的程序代码如下: ```c void Exchg1(int x, int y){ ...

    C#调用C++动态库实例程序,地址映射传参,

    描述中提到的`C#程序中使用C++提供的带指针的数组传参以及操作后的值`意味着我们需要在C++中定义一个接受数组指针的函数,然后在C#中调用这个函数,传递数组并接收返回的结果。这涉及到指针安全和内存管理,因为C#是...

    C++ 调用带参数EXE

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

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

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

    NDKC调用Java函数传参或获取变量

    NDK开发时,C/C++调用Java的函数的一些案例; 传递int类型参数: https://blog.csdn.net/niuba123456/article/details/80978500 传递String类型参数: https://blog.csdn.net/niuba123456/article/details/80978916 ...

    C++结构体作为函数参数传参的实例代码

    //值传递 void printStufdent1(struct Student st3) { cout << 子函数 << endl; st3.age = 100; cout << 名字: << st3.name << 年龄: << st3.age << 分数:

Global site tag (gtag.js) - Google Analytics