精华内容
下载资源
问答
  • //值传递,相当于此函数为交换,实参将数值传递给了形参,虽然形参实参同名,但是实际是不同的地址,因此交换的是形参实参还是未变。 /* void swap1(int a, int b) { int temp = a;//函数中确实是进行了...

    函数的参数之地址传递与值传递的区别

    #include<iostream>
    using namespace std;
    //值传递,相当于此函数为值交换,实参将数值传递给了形参,虽然形参与实参同名,但是实际是不同的地址,因此交换的是形参的值,实参还是未变。
    /*
    void swap1(int a, int b)
    {
    	int temp = a;//函数中确实是进行了交换;但是实参的值没发生变化。
    	a = b;
    	b = temp;
    }*/
    
    //地址传递,相当于此函数为交换变量的地址,即将实参的地址传给了形参,形参的地址交换了,因此实参的地址交换了,因此实参的值就发生了变化。
    void swap2(int * p1, int *p2)
    {
    	int temp = *p1;
    	*p1 = *p2;
    	*p2 = temp;
    }
    
    
    int main() {
    
    	int a = 10;
    	int b = 20;
    	//swap1(a, b); // 值传递不会改变实参
    	swap2(&a, &b); //地址传递会改变实参
    
    	cout << "a = " << a << endl;
    
    	cout << "b = " << b << endl;
    
    	system("pause");
    
    	return 0;
    }
    
    展开全文
  • 形参实参之间值传递

    千次阅读 2013-10-09 11:45:20
    C语言中,参数的传递方式是“单向值传递”,形参和实参变量各自有不同的存储单元,被调用函数中的形参变量的变化不会影响实参变量。 举个例子  #include  void swap(int x,int y)  {  int z...

    先说形参与实参的数值传递:

           函数调用时将实参数传递给形参称为参数传递。C语言中,参数的传递方式是“单向值传递”,形参和实参变量各自有不同的存储单元,被调用函数中的形参变量值的变化不会影响实参变量值。

    举个例子 

    #include<stdio.h>

     void   swap(int x,int y)

     {

         int z;

          z=x;         x=y;       y=z;

    }

    woid main()

    {

          int a,b;

          a=10;    b=20;

          swap(a,b);

          printf("a=%d\tb=%d\n",a,b);

    }

    运行结果:

    a=10    b=20

             在调用swap()函数时,实参a 和b的值是10和20.进入被调函数时,先开辟形参单元x和y,再将a和b的值分别传递给形参变量x和y,执行swap()函数使x和y的值进行交换,但是交换的结果并不会使实参变量a和b交换,所以a和b的值仍为10和20。参数的传递方式是“单向值传递”。主要的解释就是:形参和实参变量各自有不同的存储单元,实参有一个存储空间,行参有一个存储空间,将实参单值传递给形参,在形参的存储空间里进行的运算,但是这种运算不会对实参的存储空间产生影响。

           但是也有例外的情况,就是在数组作为函数参数时。

           一个变量有地址,一个数组包含若干个元素,每个数组元素都在内存中占用存储单元,他们都有相应的地址。既然指针可以指向变量,也就意味着它也可以指向数组元素,即把某个元素的地址放到一个指针变量中。所以所谓数组元素的指针就是数组元素的地址。定义一个有10个元素的整形数组,int  a[10];    定义一个指向整形变量的指针变量,int *p;     若p=&a[0]或p=a;    则代表将a[0]元素的地址赋给了指针变量p。其中值得注意的是a代表的不是整个数组,而是代表数组名,C中规定数组名代表把数组中第一个元素的地址,因此a等同与&a[0];只是形式上的不同而已。在明白了基础概念之后,我们进一不看看数组名和指向数组的指针变量的应用。

                将数组名作为函数参数的时候,在实参和形参之间的对应关系有以下四种:

    1.形参和实参都用数组名,如

    main()                                          f(int x[].int n)

    {int a[10];                                       {

    ……                                                ……

    f(a,10);                                          }

    }

    由于形参数组名接受了实参数组首元素的地址,因此在函数调用期间,形参数组与实参数组共用一段内存空间。

    2.实参用数组名,形参用指针变量,如

    main()                                    f(int *x,int n)

    {int a[10];                               {

    ……                                        ……

    f(a,10);                                     }

    }

    x为指向整形变量的指针变量,函数开始执行是x指向a[0],通过x值的变化,可以指向a数组的任一元素。

    3.实参形参都用指针变量,如

    main()                                  f(int *x,int n)

    {int a[10];  ,*p;                   {

    p=a;   ……                              ……

    f(p,10);                                }

    }

    实参p和形参x都是指针变量,p先指向数组a,即p的值就是&a[0],然后将p的值传递给x,x的值也是&a[0],因此通过x的改变就可使x指向a的任一元素。

    4.实参为指针变量,形参为数组名,如

    main()                              f(int x[],int n)

    {int a[10],*p;                     {

    p=a;……                            ……

    f(p,10);                              }

    }

    实参p为指针变量,它指向a[0],形参为数组名x,但在C中将它做为指针变量来处理,所以a[0]的值也传给了x,因此也可以理解为形参数组x和a数组共用同一段内存单元。

    以上内容想说明数组的传递和指针在数组中的应用,旨在说明第一种情况,注意红字,下面将进一步说明

    数组名作函数的参数,必须遵循以下原则:
    (1)如果形参是数组形式,则实参必须是实际的数组名,如果实参是数组名,则形参可以是同样维数的数组名或指针。
    (2)要在主调函数和被调函数中分别定义数组。
    (3)实参数组和形参数组必须类型相同,形参数组可以不指明长度。
    (4)在C语言中,数组名除作为变量的标识符之外,数组名还代表了该数组在内存中的起始地址,因此,当数组名作函数参数时,实参与形参之间不是"值传递",而是"地址传递",实参数组名将该数组的起始地址传递给形参数组,两个数组共享一段内存单元,编译系统不再为形参数组分配存储单元。
    例9-15:分析程序的执行过程。
    #include <stdio.h>
    func6 ( char str[ ] )
    { printf ("%s",str);
    }
    main( )
    { char a[10]= "Turbo C";
    func6(a); /* 数组名做函数的实参 */
    }
    内存空间存储状态如9-5图所示。

    调用时, 实参数组将首地址a 赋值给形参数组str,两个数组共同占用相同的内存单元,共享数组中的数据,a[0]与str[0]代表同一个元素,a[1]与str[1]代表同一个元素 。因此,当数组名做函数参数时,形参数组的长度与实参数组的长度可以不相同,当形参数组长度小与实参数组长度时,形参数组只取部分实参数组中的数据,实参中的其余部分可以不起作用,形参数组也可以不指明长度。
    展开全文
  • java中形参和实参的区别(传递 引用传递) 形参和实参的区别 形参 就是形式参数,用于定义方法的时候使用的参数,用来接收调用者传递的参数。...在传递的过程中,只能把实参传递形参,而不能把形参...

                     java中形参和实参的区别(值传递  引用传递)

     形参和实参的区别

    形参

    就是形式参数,用于定义方法的时候使用的参数,用来接收调用者传递的参数。形参只有在方法被调用的时候,虚拟机才会分配内存单元,在方法调用结束之后便会释放所分配的内存单元。

    因此,形参只在方法内部有效,所以针对引用对象的改动也无法影响到方法外。

    实参

    就是实际参数,用于调用方法是传递给方法的参数。实参在传递给方法前是要被先赋值才能传递的。

    在值传递的过程中,只能把实参传递给形参,而不能把形参的值反作用给实参。在函数调用过程中·,形参的值发生改变,而实参的值不会发生改变。

    在引用传递调用的机制中,实际上是将实参引用的地址传递给了形参,所以任何发生在形参上的改变也会发生在实参变量上。

    值传递和引用传递

     

    在谈值传递和引用传递之前先了解下java数据类型有哪些

    Java数据类型

    java的数据类型有两大类,基本类型和对象类型。相应的,变量也有两种类型:基本类型和引用类型。

    基本类型包括byte,short,int,long,char,float,double,boolean 这八大基本数据类型,

    基本类型的变量保存原始值,即它代表的值就是数值本身,原始值一般对应在内存上的栈区。

     

    引用类型包括 类类型接口类型数组  保存的是引用值,引用值指向内存空间的地址。代表了某个对象的引用,而不是对象本身。对象本身存放在这个引用值所表示的地址的位置。被引用的对象对应内存上的堆内存去。

    变量的基本类型和引用类型的区别

    基本数据类型在声明是系统就给它分配空间,无论是否赋值,声明的时候虚拟机就会分配 4字节的内存区域。引用数据类型不同,它声明时只给变量分配了引用空间,而不分配数据空间。 

    String 类型时声明的时候没有分配数据空间,只有 4byte 的引用大小,在栈区,而在堆内存区域没有任何分配。

    基本类型的变量是值传递引用类型的变量

    值传递

    方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的原始值得一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数,后面方法中的操作都是对形参这个值得修改,不影响实际参数的值

    引用传递

    一般也称为地址传递。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的原始值的内存地址。

    在方法执行中,形参和实参内容相同,只想同一块内存地址,方法执行中对引用的操作将影响到实际对象。

    在这里插入图片描述

    展开全文
  • 一、形参实参 (一)实参:用于方法调用时传入的。...1、改变形参变量对应的的会改变实参变量对应的。 public static void main(String[] args){ List list = new ArrayList<Integer>();

    一、形参与实参

    (一)实参:用于方法调用时传入的值。

    (一)形参:方法调用时临时穿件的实参副本,方法调用结束则废弃。

    二、引用传递与按值传递

    (一)引用传递:引用传递的实参变量为引用类型,即变量的值为地址;即调用的时候传递给副本形参的值为一个地址;

    1、改变形参变量对应的值的会改变实参变量对应的值。

    public static void main(String[] args){
    
            List list = new ArrayList<Integer>();
            list.add(0,1);
            f(list);
            for(int i=0;i<list.size();i++){
                System.out.println(list.get(i));
            }
    
        }
        private static void f(List list) {
            list.set(0,2);
        }

    打印结果:2

    2、但是改变形参的指向不会影响实参的任何事情。

    public static void main(String[] args){
    
            List list = new ArrayList<Integer>();
            list.add(0,1);
            f(list);
            for(int i=0;i<list.size();i++){
                System.out.println(list.get(i));
            }
    
        }
        private static void f(List list) {
            list=null;
        }

    打印结果:1

    (二)按值传递:按值传递的实参变量为基本类型,即变量的值为基本类型值;

     1、有关形参的任何操作均与实参无关,相当于是形参只是在创建的时候用实参的值做了一下初始化而已;

    
        public static void main(String[] args){
    
            int a=0;
            f(a);
            System.out.println(a);
        }
        private static void f(int a) {
            a=2;
            a++;
        }

     打印结果:0

    2、String, Integer, Float, Double, Short, Byte, Long, Character等基本包装类型类,虽然原理也是引用传递,但由于其特殊性,传值效果相当于按值传递;

    public static void main(String[] args){
    
            Integer a=new Integer(0);
            f(a);
            System.out.println(a);
        }
        private static void f(Integer a) {
            a=2;
            a++;
        }

    打印结果:0

    public static void main(String[] args){
    
            Integer a=new Integer(0);
            f(a);
            System.out.println(a);
        }
        private static void f(Integer a) {
            Integer b = new Integer(400);
            a=a+b;
        }

    打印结果:仍然是0

    展开全文
  • 引用类型:设计栈内存堆内存,形参改变之后会改变堆内存的,方法使用后从栈内存消失,此时实参也需要调用堆内存中的,所以形参改变会影响实参。 一个就是两个互不关联,另一个是2个方法都调用一个地方的...
  • 形参实参: 如果把函数比喻成一台机器,那么参数就是...在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参实参(实际参数) ...
  • 形参实参&值传递和地址传递

    万次阅读 2017-06-23 16:40:27
    1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能...3、实参和形参在数量上,类型上、顺序上应严格一致,否则就会
  • 主要介绍了c语言的形参和实参传递的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 实参:方法调用的时候,实际传递形参数据。 2、Java参数传递的机制规则 参数 ---》基本数据类型---》实参真实存储的数据值 参数 ---》引用数据类型---》实参存储数据的地址 3、值传递与引用传递的区别 **...
  • 形参和实参之间的三种传递方式

    千次阅读 2011-11-28 19:39:42
    //形参和实参之间的三种传递方式 void fun(int i) { i++;} void fun(int &i) { i++;} void fun(int *i) { *i=*i+1;} 若指针指向的是数组的首地址,则数组元素的访问方式 1.数组名[i] 指针名[i] 2.*...
  • 形参和实参

    2019-11-25 20:08:32
    形参和实参 形参:形式上的参数 实参:实际上的参数 例: 把变量a作为参数传递到function1的内部。 -把实参a的赋值给形参a -function1内部使用的一直是形参a 把数组array作为参数传递到function2的内部...
  • 函数的形参实参间的数据传递

    千次阅读 2015-07-19 16:18:24
    //验证形参实参同名时,对形参修改,实参值是否会变化 //分别查看形参和实参的地址 #include #include<stdlib.h>int add(int a, int b)//实现两数相加 { int result; int *funaadd,*funbadd;
  • 形参和实参值单向的值传递

    千次阅读 2016-10-11 20:14:32
    #include int sum(int x,int y)//定义有参函数sum() { int z; z=x+y; return (z);//返回值为z } void swap(int x,int y) { int t; t=x; x=y; y=t; } int main() { int a,b,c;...//调用
  • 发生函数调用时,主调函数把实参传送给被调函数的形参从而实现主调函数向被调函数的数据传送。 函数的形参和实参具有以下特点: 1. 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的...
  • 例子: int fun1(int a, int b) { a = 1; b = 2; return a+b; } for example: a = 3; b = 4;...如果是地址传递,那就是输出a=1 b=2 ...如果是值传递 那就是输出a=3 b = 4 但实际上运
  • https://www.cnblogs.com/wudiffs/p/11573314.html
  • 2.当传值调用时,改变的是形参,并没有改变实参实参可以传递形参,但是,这个传递是单向的,形参不能传递实参。 3.当引用调用时,如果参数是对象,无论对对象做了何种操作,都不会改变实参对象的...
  • 通过调用[color=#FF0000]ccpUnlock[/color]函数,得到的temp应该ccpLastSeed相等,都是0x4f833483,返回的应该是1,可是通过观察, temp的居然是0,导致函数返回值为0.后面的操作就都错了。 一头雾水啊,...
  • 文章目录前言一、值传递二、地址传递三、引用传递总结 前言 在主函数实现了解传递的本质。 提示:以下是本篇文章正文内容,下面案例可供参考 一、值传递 在主函数中 #include <iostream> using namespace ...
  • C++ 形参和实参

    2018-12-17 21:34:04
    今天突然看到一道关于形参和...我觉得只要明白了值传递和地址传递,就应该能明白形参和实参的具体工作细节了。 1、值传递 实参是变量,表达式等值。 find(int x){} y= find(z); 上面的例子中,z是实参...
  • 形参实参值传递

    千次阅读 2018-04-13 23:34:06
    形参变量只有在被函数调用的时候才分配内存单元,调用结束后即刻释放所分配的内存单元。也就是在函数被调用时申请空间,此函数执行完后释放空间。用如下代码举例#include &lt;stdio.h&gt; void Exchange...
  • 一. 形参实参 1.先来一例子: fun(int a){........} Main () { int b=0;...}其中,a是形参,b是实参....形参出现在函数定义中,在整个...发生函数调用时,主调函数把实参传送给被调函数的形参从而实现主调函数向...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 83,159
精华内容 33,263
关键字:

形参和实参之间的数据传递是值传递