首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

传址与传值

这里将讲述传址与传值的区别,先见下图。 这是传值的过程,我们明明把a,b作为实参传过去了。可以看到,交换后的a,b并没有达到我们的预期。为什么会这样呢?...其实是因为,传值的时候,形参是临时创建的,在执行完swap函数后,他们又自动销毁了,从而导致a,b的值并没有交换。如果想要改变实参的值,我们就需要进行传址,而不是传值。...见下图 我们通过把a和b的地址传给了形参,形参就能通过地址,找到a,b,以此来改变a和b的值。此时我们的实参就改为&a和&b,注意swap函数的形参类型是int*,这样就能交换a与b的值啦。...总结:传值:形参是实参的一份拷贝,函数运行起来后,实参是实参,形参和实参没有任何关联,改变形参时,不会对实参造成影响。            ...传址:形参是实参地址的一份拷贝,形参指向的实体是实参,对形参解引用后,拿到的内容就是实参,因此,对形参解引用后的内容进行修改,改变的就是实参。

11510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    传值与传地址

    很多语言在传参的时候都有一个传值和传地址(或者是引用)的问题,我想用 C++ 语言来简单的描述一下。...因为我觉得无论是传值还是传址,C 或者 C++ 这两种语言都是能够比较直观的描述清楚的语言,原因是可以容易的去观察内存。其他语言也可能可以,只是其他语言的我不太知道如何去做。...对于第一段和第二段代码在 C++ 中称为传值,对于第三段和第四段代码在 C++ 中称为传地址。地址和值在内存中本身都是一个值,只是具体分类是做了区别而已。...NO.6 Java 传参 Java 中说的传参全部是传值,但是当形参是一个对象的时候,其实相当于传的是一个地址。因为变量中本身就保存的是一个地址,而不是一个值。...传参时,也是把堆空间的地址传给了形参。Java 的堆和栈,是由 JVM 管理和维护。 End

    2.3K40

    关于传值与传引用的讨论

    效率问题 对于用户自定义的类型来说,传引用一般要比传值高效。...而传引用则不用进过如此多的构造与析构,甚至一次都不用。 对内置类型来说,传值的效率往往要高于传引用。内置类型包括了int,float ,double,指针类型等等。...-523832796.jpg] 可以看到,传引用比传值多了一次寻址操作,这是因为引用的实现往往基于指针,因此传引用通常意味着真正传递的是指针。...总结: **对内置类型来说,通常传值更高效。** **对用于自定义类型来所,传值要经历构造与析构过程,一般比较耗时。** 对象的切割问题 传值有时会引起对象的切割问题。...如上所示,传值是可以比传引用快的没有,因为它少了一次解引用的操作。 (完)

    82050

    关于传值与传引用的讨论

    效率问题 对于用户自定义的类型来说,传引用一般要比传值高效。...而传引用则不用进过如此多的构造与析构,甚至一次都不用。 对内置类型来说,传值的效率往往要高于传引用。内置类型包括了int,float ,double,指针类型等等。...总结: 对内置类型来说,通常传值更高效。 对用于自定义类型来所,传值要经历构造与析构过程,一般比较耗时。 对象的切割问题 传值有时会引起对象的切割问题。...若希望在func中使用到实参的特性,传引用能够保证这一点。 STL中的使用情况 如果你打开STL中的源码,你会发现容器的iterator都是通过传值形式传参。...如上所示,传值是可以比传引用快的没有,因为它少了一次解引用的操作。 (完)

    75620

    对象的传值与返回

    对象的传值与返回 说起函数,就不免要谈谈函数的参数和返回值。一般的,我们习惯把函数看作一个处理的封装(比如黑箱),而参数和返回值一般对应着处理过程的输入和输出。...我们这里并不讨论函数的使用和设计,我们关注与函数参数和返回值的传递方式。 对于内置数据类型的参数和返回值,函数实际参数的传递一般是通过压栈完成,函数执行时会从栈内取出参数的值进行计算。...函数带有返回值时,若返回值不大于4字节,则会把返回值存储在eax寄存器中,而long long类型返回值回保存在edx:eax寄存器中,double类型的数据会被协处理器栈保存。...相对于内置类型的参数传递和返回值,对象的传值和返回可能更复杂一点。当然,如果使用对象的引用或者指针作为参数传递和返回值的方式,这里和上述的内置类型并无多大区别,因为指针总是4个字节。...因此,我们可以针对对象的传值和返回得出如下结论: 1. 对象参数传递之前需要进行一次对象拷贝,将原对象的内容完整的拷贝到参数对象内部,函数执行时访问的是参数对象,而不是原对象。 2.

    2.5K80

    【C语言】传值调用与传址调用详解

    传值调用和传址调用是两种常见的传递方式,它们的差别决定了函数能否改变传入参数的值。传值调用会将参数的副本传递给函数,而传址调用则将参数的地址传递给函数,从而使得函数可以直接修改原始参数。...C语言 传值调用 1. 什么是传值调用? 传值调用是C语言中最常见的函数参数传递方式。在这种方式下,函数接收到的是参数的副本。换句话说,函数在调用时并不会修改原始参数,而是对参数的副本进行操作。...与传值调用不同,传址调用会将变量的地址传递给函数,这样函数就能够直接修改原始变量的值。在传址调用中,传递的是变量的指针,函数通过指针访问并修改原始变量的内容。 2....传值调用与传址调用的比较 1. 传值调用的优缺点: 优点: 安全性较高,因为函数内部不会直接修改外部变量的值。 当参数较小且不需要在函数内部修改时,传值调用是更合适的选择。...传值调用与传址调用的应用场景 传值调用:当函数不需要修改传入的参数,或者当参数是小型数据(如整数、浮点数等)时,传值调用是最常见且安全的选择。

    11110

    传值和传址

    往期文章 【JS ES6】const var let 一文搞懂声明关键字所有的知识点 目录 传值 什么是传值  例  传址 什么是传址 例  ---- 传值 什么是传值 let a = 1; let...b = a; console.log(a, b); //1 1 传值是获取一份儿相同的值,并自身重新开一份儿属于自己的内存地址,两个变量是互相独立的并不会互相影响。  ...例  let a = 1; let b = a; b = 2; console.log(a); console.log(b); 修改了b的值,a的值不会受到影响,这就是传值,两者是独立的存在,引用内存比较小的引用赋值一般都是传值...传址 什么是传址 let a = { name: "xiaoxie", }; let b = a; console.log(a, b); 传值是获取一份儿相同的值,不会自身重新开一份儿属于自己的内存地址...两者使用同一个内存地址,一般引用占用内存较大的变量时,会传址,比如对象和数组。

    2.7K20
    领券