精华内容
下载资源
问答
  • 函数值传递

    2012-10-09 17:26:50
    比较值传递与地址传递的区别,方便c++初学者使用
  • C++函数值传递

    2020-05-11 10:52:35
    C++函数值传递 目录 C++函数值传递 1、值传递 2、代码演示 1、值传递 所谓值传递,就是函数调用时实参将数值传递给形参 值传递时,如果形参发生改变,并不会影响实参 2、代码演示 #include<iostream>...

    C++函数值传递

    目录

    C++函数值传递

    1、值传递

    2、代码演示


    1、值传递

    • 所谓值传递,就是函数调用时实参将数值传递给形参
    • 值传递时,如果形参发生改变,并不会影响实参

    2、代码演示

    #include<iostream>
    using namespace std;
    
    //值传递
    //所谓值传递,就是函数调用时实参将数值传递给形参
    //值传递时,如果形参发生改变,并不会影响实参
    void swap(int a,int b) {
    	int temp = a;
    	a = b;
    	b = temp;
    	cout << a << endl << b << endl;
    	return;
    }
    int main() {
    	int num = 10;
    	int num1 = 20;
    	cout << num << endl << num1 << endl;
    	swap(num, num1);
    	cout << num << endl << num1 << endl;
    	system("pause");
    	return 0;
    }

    10
    20
    20
    10
    10
    20
    请按任意键继续. . .

     

     

    展开全文
  • 函数值传递 三.函数址传递 四.函数值传递和址传递区别 五.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.简介 函数声明只是一个空壳,不会有具体的函数实现,而定义要实现...

    目录

    零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

    一.简介

    函数声明只是一个空壳,不会有具体的函数实现,而定义要实现函数的实现,例如:

    1.函数声明:不需要实现这个函数的功能

    int sub(int x,int y); //只需要声明即可,不需要实现这个函数的功能
    

    2.函数定义:必须实现这个函数的功能

    int sub(int x,int y) 需要实现这个函数的功能
    {
        return (x-y);
    }
    

    3.函数调用:调用之前必须先声明或者定义

    函数在调用之前必须声明或者定义,否则会报错:找不到标识符,这也是为什么 hello world 中调用 printf 函数必须要包含 stdio.h 头文件的原因;

    二.函数值传递

    C 语言中,函数的参数传递方式有两种:值传递与地址传递。

    **值传递:使用变量、常量、数组元素作为函数参数,在调用结束后,形参值的任何变化都不会影响到实参的值。**举个例子:

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言 函数值传递和址传递
    //@Time:2021/06/20 08:00
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/ 
    
    #include <stdio.h>
    void func(int x, int y)
    {
        x = 100;
        y = 200;
        printf("func:x = %d, y = %d\n", x, y);
    }
    int main(void)
    {
        int a=10;
        int b=20;
         /*变量a、b为func函数的实际参数*/
        func(a, b);
        printf("main:a = %d, b = %d\n", a, b);
        return 0;
    }
    /*
    输出:
    func:x = 100, y = 200
    main:x = 10, y = 20
    */
    

    main 函数中调用 func 函数,以整数类型 ab 作为实参传递,虽然在 func 函数中形参 xy 值发生改变,但是并以不会影响 main 函数中 ab 的值,这就是所谓的值传递;

    三.函数址传递

    C 语言中,函数的参数传递方式有两种:值传递与地址传递

    **址传递:使用指针变量或者内存地址作为函数参数,在调用结束后,实参跟随形参一起变化。**举个例子:

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言 函数值传递和址传递
    //@Time:2021/06/20 08:00
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/ 
    
    #include <stdio.h>
    void func(int *x, int *y)
    {
        *x = 100;
        *y = 200;
        printf("func:x = %d, y = %d\n", x, y);
    }
    int main(void)
    {
        int a=10;
        int b=20;
         /*分别对变量a、b取地址,并作为func函数的实际参数*/
        func(&a, &b);
        printf("main:a = %d, b = %d\n", a, b);
        return 0;
    }
    /*
    输出:
    func:x = 100, y = 200
    main:x = 100, y = 200
    

    main 函数中调用 func 函数,分别对变量 ab 取地址,并作为 func 函数的实参传递,由于形参 x 和实参 a,形参x和实参 a 指向同一个内存地址,在 func 函数中形参 xy 值发生改变,main 函数中 ab 的值也会跟着一起改变,这就是所谓的址传递;

    四.函数值传递和址传递区别

    • 值传递:实参是传递的值,并非地址,形参的值发生改变,实参不受影响;
    • 址传递:实参是传递的地址,并非值,形参的值发生改变,实参会跟着一起改变(因为实参和形参都是指向同一块内存地址);

    五.猜你喜欢

    1. C语言逻辑运算符
    2. C语言三目运算符
    3. C语言逗号表达式
    4. C语言 sizeof 和 strlen 函数区别
    5. C语言 strcpy 和 strcpy_s 函数区别
    6. C语言 memcpy 和 memcpy_s 区别
    7. C语言 数组定义和使用
    8. C语言 数组遍历
    9. C语言 数组下标越界
    10. C语言 数组内存溢出
    11. C语言 数组下标越界和内存溢出区别
    12. C语言 二维数组定义和使用
    13. C语言 二维数组行数和列数计算
    14. C语言 指针声明和定义
    15. C语言 指针 p++ / p–
    16. C语言 p++/§++/_(p++)/_p++
    17. C语言 使用指针遍历数组
    18. C语言 指针和数组区别
    19. C语言 数组指针
    20. C语言 指针数组
    21. C语言 指针数组和数组指针区别
    22. C语言 空指针 NULL
    23. C语言 void 指针
    24. C语言 野指针
    25. C语言 函数声明和定义
    26. C语言 函数声明和调用
    27. C语言 函数值传递和址传递

    未经允许不得转载:猿说编程 » C语言 函数值传递和址传递

    展开全文
  • Java之函数值传递和对象传递

    千次阅读 2017-05-30 15:18:34
    Java之函数值传递和对象传递文章链接:知识点: 函数传参问题提出; 函数传参问题的总结; 实例讲解给函数传基本数据类型和对象; 4. 新名词记录{Java函数传值和传递引用}概览在我们写函数的时候,我们经常需要传递...

    欢迎关注WX公众号:
    门徒与思索

    Java之函数值传递和对象传递

    文章链接:http://blog.csdn.net/qq_16628781/article/details/72810012

    知识点:

    1. 函数传参问题提出;
    2. 函数传参问题的总结;
    3. 实例讲解给函数传基本数据类型和对象;
    4. 新名词记录{Java函数传值和传递引用}

    概览

    在我们写函数的时候,我们经常需要传递参数进去,但是传参这里却是有个不太令人注意的大学问,如果不能好好理解,那么出现一些会令你“意想不到”的怪事。

    未能正确的理解传参的问题,就会导致一些人为很奇怪的现象出现。例如,有次在项目中,传递了一个List类型的参数,但是很奇怪的是,每次执行那个方法之后,在函数外面的那个list对象被置空了。

    那时候一直都没有想到是什么问题导致的。今天特意搜寻了下关于Java函数传参的问题,才理解了这个问题。

    先来一个总结。

    总结

    Java的参数传递中,分为值传递和引用传递。(很多人说后面一个是对象传递,但是Java中,一切皆对象,还是说引用传递比较好),下面先来一个总结:

    1. 如果传递如果是基本数据类型传值,对形参的修改不会影响实参。
    2. 如果传递的是非基本数据类型,例如包装类型对象,那么形参和实参指向同一个内存地址(同一个对象),所以对形参的修改会影响到实参的属性。

    解释1:基本的数据类型包括,byte,short,int,long,double,char,string以及他们的包装类型。他们是不可改变的数据类型了。

    解释2:非基本数据类型包括,list,stringbuffer,以及自定义的实体类都属于非基本数据类型。

    实例讲解

    1. 传递基本数据类型int
    //ParamsPass类的方法
    public void paramPassTest1(Integer a) {
           a = 20;
           System.out.println(TAG + ": " + a);
    }
    //调用上面的方法
    ParamsPass paramsPass = new ParamsPass();
    Integer a = new Integer(99);
    paramsPass.paramPassTest1(a);
    System.out.println(TAG + a);
    

    执行上面的方法,看到传递的int类型实参在函数内部被调用了,外面的a的值没有改变。结果如下图所示:
    结果截图

    1. 传递对象

    userbean实体类

    public class UserBean implements Serializable {
       //串行化版本统一标识符
       private static final long serialVersionUID = 1L;
       
       private String password;
    
       public String getPassword() {
           return password;
       }
    
       public void setPassword(String password) {
           this.password = password;
       }
    }
    //1、测试方法
       public void paramPassTest2(UserBean userBean) {
           System.out.println("inside_func_userbean_hashcode: " + userBean.hashCode());
           userBean.setPassword("000000");
           System.out.println("inside_func_userbean_password: " + userBean.getPassword());
       }
       //2、调用测试方法
           ParamsPass paramsPass = new ParamsPass();
           UserBean userBean = new UserBean();
           userBean.setPassword("123456");
           System.out.println("outside_func_before_Password: " + userBean.getPassword());
           System.out.println("outside_func_before_hashcode: " + userBean.hashCode());
           paramsPass.paramPassTest2(userBean);
           System.out.println("outside_func_after_Password: " + userBean.getPassword());
           System.out.println("outside_func_after_hashcode: " + userBean.hashCode());
    

    在上面中,传入了一个userbean实体类对象,初始设置的密码是“123456”,然后在里面,将密码改成“000000”;最后将在外面的userbean对象和传入到函数里面的对象的hashcode打印出来,结果居然是同一个地址,由此说明传递对象的是一个对象的引用,在方法里面进行修改对象的参数,会将引用的对象进行修改。
    结果截图

    1. 传入list对象
    //userbean和上面的是一样的,这里省略了
    //测试方法,打印hashcode和值
        public void paramPassTest3(List<String> list) {
           System.out.println("inside_func_hashcode: " + list.hashCode());
           list.add("other value");
           System.out.println("inside_func_after_added_size: " + list.size());
           list.clear();
           System.out.println("inside_func_after_cleared_size: " + list.size());
       }
       //调用上面的测试方法
               List<String> stringList = new ArrayList<>();
           stringList.add("value1");
           stringList.add("value2");
           System.out.println("outside_func_before_hashcode: " + stringList.hashCode());
           System.out.println("outside_func_before_size: " + stringList.size());
           paramsPass.paramPassTest3(stringList);
           System.out.println("outside_func_after_size: " + stringList.size());
           System.out.println("outside_func_after_hashcode: " + stringList.hashCode());
    

    结果如下图所示:
    结果截图
    可以看到打印输出,两个对象是同一个对象,所以传递list对象的时候,传递的也是对象的引用,对形参list对象进行操作,同时也会影响外面实参的属性。因为list已经不是一个基本的数据类型了。
    同理的,stringbuffer,stringBuilder也是如此。

    伪总结

    说了这么多了,在开始提出的那个疑问,就得到解决了。这里就不再啰嗦了,总结在前面已经写了。

    以上那个就是所有内容,如有任何问题,请及时与我联系,谢谢。

    展开全文
  • GO语言函数值传递与闭包

    千次阅读 2017-11-10 09:47:49
    GO语言函数值传递与闭包

    函数值传递

    函数也是值。他们可以像其他值一样传递,比如,函数值可以作为函数的参数或者返回值。
    package main
    
    import (
    	"fmt"
    	"math"
    )
    
    func compute(fn func(float64, float64) float64) float64 {
    	return fn(3, 4)
    }
    
    func main() {
    	hypot := func(x, y float64) float64 {
    		return math.Sqrt(x*x + y*y)
    	}
    	fmt.Println(hypot(5, 12))   //调用hypot函数,输出13
    
    	fmt.Println(compute(hypot))  //将hypot函数作为compute函数的参数,使用3,4作为调用hypot函数的参数调用,结果为5
    	fmt.Println(compute(math.Pow))  //将math.Pow函数作为compute函数的参数,使用3,4作为调用math.Pow函数的参数调用,结果为81
    }

    函数的闭包


    package main
    
    import "fmt"
    func adder(i int) func(int) int {
    	sum := i
    	return func(x int) int {
    		sum += x
    		return sum
    	}
    }
    
    func adder2(i int) func() int {
    	sum := i
    	return func() int {
    		return sum
    	}
    }
    
    func main() {
    	fmt.Printf("%T\n", adder2(3))  //此处返回的类型为一个函数func() int
    	fmt.Println(adder2(3)())       //使用此方式返回为最终的结果3
    	
    	pos, neg := adder(1), adder(1)
    	for i := 0; i < 3; i++ {
    		fmt.Println(
    			pos(i),
    			neg(-2*i),             //这里演示的也是闭包函数的调用方式,结果1 1,2 -1,4 -5
    		)
    	}
    }
    



    展开全文
  • 以前学函数值传递和引用传递的时候用的例子是整型变量,在这篇文章中详细说明了值传递和引用传递。 但是如果是字符串变量,今天又有点迷糊了! 先说总结: 要想用指针传递通过函数改变主函数中字符串指针变量的值...
  • C 函数值传递和指针传递的效率问题

    千次阅读 2016-05-14 17:02:21
    C 函数值传递和指针传递的效率问题C中有两种传递,值传递和指针(地址)传递。值传递需要把数据的一份拷贝传递入函数形参表,并存储在栈中,函数返回后弹出栈,拷贝被删除。而指针传递则不然。如果形参表是指针,...
  • Go 语言函数值传递值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数。以下...
  • Python函数值传递与引用传递

    千次阅读 2019-03-27 10:11:32
    传递与引用传递 对于函数的参数而言,我们都知道什么是形式参数,什么是实际参数。 但在此之后,我们还应该清楚什么是值传递,什么是引用传递。 值传递就是当实际参数为不可变对象时进行的参数传递。而引用传递...
  • 值、引用参数按值传递 PHP中默认是按值传递参数,而且...由于传递的值和变量,与函数里的数值分别存储在不同的内存区块,所有如果函数对导入的数值做了任何变动,并不会父程序造成直接影响。 header('content-type:tex
  • C语言函数值传递

    千次阅读 多人点赞 2018-04-26 15:37:32
    啥是值传递,有的人说是把实参的值复制或者拷贝到形参,这样说当然是对的,但是其真实的过程你可能就不清楚了,我们拿出下面这两条程序: void swap(int a,int b) swap(a,b); 一个是函数声明,一个是函数调用,真实...
  • Python函数值传递和引用传递

    千次阅读 2019-08-19 20:19:09
    通常情况下,定义函数时都会选择有参数的函数形式,函数参数的作用是传递数据给函数,令其对接收的数据做具体的操作处理。 在使用函数时,经常会用到形式参数(简称“形参”)和实际参数(简称“实参”),二者都叫...
  • 40. 函数值传递

    2021-01-03 15:55:23
    上面代码实现了a/b的交换,如果利用函数调用的方式去实现,该如何实现? 发现上面代码并没有实现ab交换,于是引出了值传递的概念。
  • xid= 2769750468232 axid= 2769750468232 ax= [10] bx= [10, 10] x= [10, 10]
  • 从内存角度理解函数值传递与地址传递的区别

    千次阅读 多人点赞 2020-09-05 18:48:41
    ** 新人博客小编一枚,希望与大家多多交流C++的学习心得,欢迎大家批评指教、共同进步! 对C++初学者来说,对于值传递和地址传递的使用都停留在“用而不懂”的状态,以至于在实际应用经常会发生...地址传递:以指针为
  • void func(const int *A,int size);//第二个参数为数组长度

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,335
精华内容 9,334
关键字:

函数值传递