精华内容
下载资源
问答
  • C语言函数传递方式-值传递和地址传递

    千次阅读 多人点赞 2020-03-02 12:10:20
    C语言函数传递方式 值传递 定义 所谓的值传递,顾名思义就是使用变量、常量、数组等作为函数的参数。 地址传递

    C语言函数传递方式

    值传递

    定义

    • 所谓的值传递,顾名思义就是使用变量、常量、数组等作为函数的参数。实际是将实参的值复制到形参相应的存储单元中,即形参和实参分别占用不同的存储单元。

    特点

    • 值传递的特点是单向传递,即主调函数被调用时给形参分配存储单元,把实参的值传递给形参,在调用结束后,形参的存储单元被释放,而形参值的任何变化都不会影响到实参的值,实参的存储单元仍保留并维持数值不变。

    示意图

    值传递示意图
    其实值传递过程中由隐含的一步,如下代码所示:

    	int x = a;
    	int y = b; 
    

    所以swap1函数交换的是x和y,而原来的a和b从未改变。

    代码演示

    void swap1(int x,int y)
    {
    	int temp;
    	temp = x;
    	x = y;
    	y = temp;
    	printf("x = %d,y = %d\n",x,y);	
    }
    int main(int argc, char *argv[]) 
    {
    	int a = 12,b = 24;
        swap1(a,b); // 值传递 
        printf("a = %d b = %d",a,b);
    }
    
    

    运行结果

    值传递运行结果


    地址传递

    说明

    • 大家都知道,在C语言中,数组名就代表数组的首地址。所谓的地址传递,指的就是函数的参数是数组名或者指针。传递的是数组的首地址或指针的值,而形参接收到的是地址,即指向实参的存储单元,形参和实参占用相同的存储单元,即形参和实参是相同的。

    特点

    • 形参并不存在存储空间,编译系统不为形参数组分配内存。因此在数组名或指针作函数参数时所进行的传送只是地址传送,形参在取得该地址之后,与实参共同拥有一段内存空间,形参的变化也就是实参的变化。

    示意图

    地址传递示意图
    注意:这里也有一个隐含动作,如下代码所示:

    	x = &a;
    	y = &b;
    

    分别将a的地址,b的地址赋值给x和y,这样swap2函数操作的数其实就是a和b。

    代码演示

    void swap2(int* x,int* y)
    {
    	int temp;
    	temp = *x;
    	*x = *y;
    	*y = temp;
    	printf("x = %d y = %d\n",*x,*y);
    }
    int main(int argc, char *argv[]) 
    {
    	int a = 12,b = 24;
    	swap2(&a,&b); //地址传递
    	printf("a = %d b = %d",a,b); 
    }
    

    运行结果

    地址传递运行结果
    以上就是C语言值传递和地址传递的区别了,相信大家应该很清楚了吧!

    展开全文
  • 前言 “引用”的这个词我到经常使用到,但是它经常是作为动词出现的,而作为名词,我却很少用到。这个上次面试就问我指针和引用的...在函数中可以使用但是无法修改原来的实参的值,而地址传递则是将变量的地址传递...

    前言

    “引用”的这个词我到经常使用到,但是它经常是作为动词出现的,而作为名词,我却很少用到。这个上次面试就问我指针和引用的区别,我就有点蒙圈了,因为对“引用”这个词确实不了解,然后面试官又问我知不知道值传递和地址传递,我差点拍案而起,心里想问我这个问题,是不是有点太简单了,然后回答的是:“值传递就是把变量的值直接传递给函数,在函数中可以使用但是无法修改原来的实参的值,而地址传递则是将变量的地址传递给函数形参,在函数中可以通过形参指针直接访问到变量所在的内存从而可以修改实参的值”。 后来面试官也没说什么。。。我一直认为“值传递”传递的变量的值,“地址传递”传递的变量的地址。 多好的逻辑,还很合理、顺口。 但是对于“引用”这个概念确实不了解,然后就是网上查资料,一查吓一跳啊,发现自己真的理解错了,特写一下笔记纪念下。

    函数传递参数的两种方式: 值传递和地址传递

    1. 引用的定义

    首先,引用是C++语言对C语言的一个重要补充,而C语言中是不包含“引用”的。
    我们可以对一个数据建立一个“引用”; 它的作用是为变量起一个别名。
    例如,有个变量a,我们通过引用给a起一个别名:
    int a = 10;
    int &b = a;
    则b可以成为变量a的一个引用。
    此时:b = 10;
    &b = &a; //变量a与他的引用的地址一样

    而使用指针的话:
    int *p = &a; //&:取地址
    此时 *p = 10; // 因为p存储的是a的地址,所以p指向a,

    2. 引用的注意事项:

    1) 引用不是一种独立的数据类型,对引用只能声明,不能定义。 只能先定义一个变量,然后在声明对该变量的一个引用(起个别名)。
    2) 声明一个引用时,必须同时对他进行初始化,即表明它代表那个变量。
    3) 在声明一个引用后,不能再是指作为另一个变量的引用。只能初始化一次。
    4) 不能建立数组的引用,包括建立对数组元素的引用。
    int a[10];
    int &p = a; //数组名也是个地址常量,
    int &q = a[0]; //这些都是不合法的
    5) 不能建立引用的引用, 也没有引用的指针。
    int a = 10;
    int &b = a; // 由此可以看出引用与原变量是不等价的。虽然地址一样,值一样。
    int &c = b;
    int p = b;
    //这些都是不合法
    6) 可以取引用的地址。 注意此时引用的地址等于变量的地址
    int a = 10;
    int &b = a; // &b == &a
    int
    p = &b; // 等同于p = &a;

    3. 引用的本质:

    引用本质上就是一个指针型常量,在声明的时候为引用开辟了内存,但内存里存储的是变量的地址,这个指针是一样的。 但是有个特性是:引用的地址=变量的地址。 凡是可以使用引用的地址都可以使用指针来代替。C++引入引用的目的是为了简化对(指针)地址的操作,方便使用。
    疑问: 为什么给引用分配了内存,在取引用的地址是依然是变量的地址???

    4. 值传递和地址传递:

    1)C语言中可以说只有值传递。

    	  func1(int a, int b);
    	  func2(int *a, int *b);
      // 实际调用过程中的形式:
      {
    	  int a, b;
    	  ... ...
    	  func1(a, b);
    	  func2(&a, &b);
      }
    

    这两个都属于值传递,只是传递的值不同而已
    第一个传递的是变量的值;
    第二个传递的是变量的地址。
    传递变量的值:无论函数中如何操作形参,都不会影响到实参变量的值;
    传递变量的地址:无论函数中如何操作形参,都不会影响到实参变量的地址; 不会改变实参地址;不会改变实参地址;但是可以改变这个地址里的值,也就是可以改变变量的值。但是我们传递的是变量的地址,从这个角度来看是和普通的值传递完全一致的。

    2)C++中引入了地址传递:

      func3(int &a, int &b);
      //实际调用中的形式:
      {
          int a ,b ;
          ... ...
          func3(a ,b);
      }
    

    这才是严格意义上的地址传递,调用函数时使用的是变量,但是传递的却是变量的地址,传递的却是是变量的地址,传递的却是变量的地址。

    简单的理解就是:
    调用的函数参数完全一致 func(a ,b); 而实际上:
    函数本身传递变量的值的话就是值传递;
    函数本身传递的是变量的地址的话就是地址传递;
    func1(a,b); func2(&a,&b); 这两个我们在传递的时候传递的我们指定的值,只不过值的类型不一致;
    func3(a,b); 我们虽然传递的是变量,而函数实际传递的是他们的地址。这才是地址传递。就是说地址传递是函数自动传递的,而不是我们通过取地址等运算把真正的地址传递过去。虽然指针完全可以胜任相应的工作。

    5. 引用的实例

    /*
    *  使用的是g++编译器,虽然很像C
    *      只在于 C++兼容C语法
    */
    
    #include<stdio.h>
    void func(int &b)
    {
        printf("\tb = %d , &b = %p\n",b, &b);
    
    }
    
    int main(int argc, char **argv)
    {
       int a = 1;
       int &b = a;
       printf("\ta = %d , b = %d\n",a,b);
       b = 2;
       printf("\t&a = %p \n\t&b = %p\n", &a,&b);
       a++;
       func(a);
       b++;
       func(b);
       return 1;
    }
    

    结果为:

    root# g++ pointer.c
    root# ./a.out
    	a = 1 , b = 1
    	&a = 0x7fff8456775c 
    	&b = 0x7fff8456775c
    	b = 3 , &b = 0x7fff8456775c
    	b = 4 , &b = 0x7fff8456775c
    
    

    可以看出:变量a, 变量a的引用b, func的形参等都具有相同的地址,他们任意一个值的改变都可以影响到实参变量a的值。

    展开全文
  • C语言参数传递----值传递与地址传递

    千次阅读 多人点赞 2017-09-15 23:32:58
    最近开始复(yu)习(xi)C语言,看到参数传递这里,又遇到了以前一直没有搞清楚的一个问题,我相信这个问题大家许多初学者也会遇到过,就是C语言函数的参数传递方式。...2)地址传递 3)数组作为函数参数

    最近开始复(yu)习(xi)C语言,看到参数传递这里,又遇到了以前一直没有搞清楚的一个问题,我相信这个问题大家许多初学者也会遇到过,就是C语言函数的参数传递方式。
    C语言中参数的传递有两种方式:
    1)值传递
    2)地址传递
    3)数组作为函数参数
    这里用两个例子来说明这两种方式的区别。

    • 值传递
    
    int main(){
        int a=3;
        int b=4;
        printf("初始值a=%d,b=%d\n",a,b);
        exchange(a,b);
        printf("运行后a=%d,b=%d",a,b);
        return 0;
    }
    void exchange(int a ,int b){
       int temp;
       temp=a;
       a=b;
       b=temp;
    }

    运行结果:这里写图片描述

    • 地址传递
    int main()
    {
        int i,j,k;
        int data[100];
        int length=3;
       int a=3;
        int b=4;
        printf("初始值a=%d,b=%d\n",a,b);
        exchange(&a,&b);
        printf("运行后a=%d,b=%d",a,b);
    }
    
    void exchange(int  *a ,int *b){
        int temp;
        temp =*a;
        *a=*b;
        *b=temp;
    }
    

    运行结果:这里写图片描述

    why?
    老生常谈的问题了,我们预期的是ab的值会交换,但是并没有达到预期的效果,因为这个函数使用的是值传递。
    我个人是这样的理解的,main函数中声明的ab两个变量,看作是计算机中的两个盘子A,B。A盘子中放的是“3”,B盘子中放的是“4”。
    值传递的方式,只是把两个盘子中的东西作为参数传入,起到的是一种模板作用,函数收到这两个参数之后,会找到另外两个跟“3”“4”一样的东西,对这两个东西进行操作。而并不会改变main中原来两个盘子的值。而地址传递,就是把A,B这个两个盘子作为参数传过去了,进行的操作会影响到这个盘子里的东西。
    换言之,我们去饭店点菜,有时大厅中能看到保鲜膜裹着的样品菜,我们指着桌上盛放“鱼香肉丝”的盘子告诉服务员我们要这个菜,厨师会另取相同的食材做出我们点的“鱼香肉丝”,而原本放在大厅里的样菜并没有动。—-这是值传递。
    相反,我们跟服务员说,我们就要这个盘子里的菜,这样厨师就直接烹饪了我们指定的盘子里的菜。—-这是地址传递。

    另外还看到一种引用传递,是c++语言中参数的传递方式,声明格式如下

    void exchange(int &a,int &b){
    /*操作*/
    }

    另外需要注意的是,C语言中使用地址传参,声明的格式是void function(int *a)
    而调用的格式是:function(&a)
    因为传递的参数是地址,所以在调用时候要有“&”取地址符号!

    • 数组作为函数参数
      1)数组元素作为函数参数,函数的声明没有什么差别,还是分为上述的两种方式:void function(int a);//值传递或者是void function(int *a);//地址传递,调用函数时分别采用function(a[2]);或者function(&a[2]);这种情况下,存在值传递与地址传递的不同,参考上述。
      2)数组名作为参数传递:
      例如function(int a[])
      调用函数:function(a);//这里a是一个数组名字
      用数组名做函数实参时,不是把数组元素的值传给形参,而是把实参数组的首元素的地址传递给形式参数,也就是说形参数组发生改变,会使实参数组发生同样的变化。换言之,函数进行的操作就是直接发生在传递进来的数组上的。
      下面举一个例子,对数组a中的数字进行排序
    #include stdio.h
    int main()
    {
        int i;
        int n=6;
        int a[6]={7,5,3,4,12,54};
        for(i=0;i<n;i++) printf("%d ",a[i]);
        printf("\n排序之后\n");
        Sort(a,n);
         for(i=0;i<n;i++) printf("%d ",a[i]);
        return 0;
    }
    
    void Sort(int a[],int n){
        int i,j;
        int tmp=0;
        for(i=0;i<n;i++){
            for(j=0;j<n-1-i;j++){
                if(a[j]>a[j+1]){
                    tmp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=tmp;
                    }
            }
        }
    }

    运行结果:这里写图片描述

    可以看出,函数名作为参数时,所做的操作会直接影响原来的数组。

    展开全文
  • 浅谈C/C++值传递、地址传递、引用传递共同的困惑什么是函数形式参数和实体参数功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个...


    作者:Gl_Zhang96
    来源:CSDN
    版权声明:本文为博主原创文章,转载请附上博文链接!

    共同的困惑

    相信大家在入门学习C++的时候都会有这样一个疑惑,在对函数调用的时候,函数内部的操作究竟会不会引起主函数变量值的改变。对于这个问题,简单谈论一下我自己的理解。理解不深,如有错误欢迎大家指正。

    函数

    我理解的函数实际是一个功能的集合。类似数学中的函数,给定一个输入xx ,就会得到一个输出yy。C++的程序也是一样,给定一些参数,通过调用函数,得到一些返回值或者实现某些功能。

    形式参数和实体参数

    首先介绍一下函数的形式参数(以下简称形参)和实体参数(以下简称实参)。
    话不多说,先来一段代码:

    #include <iostream>
    using namespace std;
    
    void change(int c, int d)
    {
        c = 3;
        d = 5;
    }
    
    int main()
    {
        int a = 1;
        int b = 1;
        change(a, b);
        cout << "a=" << a << endl;
        cout << "b=" << b << endl;
        return 0;
    }
    

    在以上代码中,除主函数以外,定义了一个change函数,函数带有参数(int c, int d),这两个就称为形参,通过这两个参数在函数内部的运算来标明函数的实现内容。在主函数(main)中,我们调用了函数change(),传入的两个参数(int a, int b)就是实参了。那么函数的实参是如何传递值给形参的呢?

    值传递(数组作为参数时除外)

    我们来运行上方的代码,得到如下的结果:
    在这里插入图片描述
    很显然,change()函数并没有改变主函数中a和b的值。这种由实参到形参传递参数值的过程就称为值传递了。
    讲到这里可能还是有点晦涩难懂,通俗的来讲,值传递相当于将原来的参数复印了一份交给函数,无论函数对复印件如何处理,都不会对原件产生任何的影响。而当函数执行结束后,就会将形参释放,也就是将复印件销毁了。
    下面用一个简单的图来表示这个过程:
    在这里插入图片描述
    对于main函数而言,系统开辟一块内存空间,其中存放变量a和b,值都为1。然后调用函数change(),系统重新开辟一块存储空间,并将a和b的值拷贝一份给c和d(这里注意,形参可能与实参同名,例如这里的形参也可以是a和b,但二者不是一个东西,因为根本不在一块存储空间内),此时c和d的值变为1,进而通过函数的操作将c和d的值修改为3和5,函数调用结束,change区域变量释放。显然main中a和b的值并未发生任何改变。

    地址传递

    那如果想通过函数来修改变量的值该怎么做呢,一种方法就是通过地址传递,请看下面的代码:

    #include <iostream>
    using namespace std;
    void change(int *c, int *d)
    {
       *c = 3;
       *d = 5;
    }
    
    int main()
    {
       int a = 1;
       int b = 1;
       change(&a, &b);
       cout << "a=" << a << endl;
       cout << "b=" << b << endl;
       return 0;
    }
    

    此处change函数的形参变为了整型指针,并且调用change()函数时,传入的参数也是变量a和b的地址,即让指针c和d指向变量a和b。还是用一个图来说明这个问题:
    在这里插入图片描述
    同之前一样,当调用函数change()时,系统新开辟一块存储空间用来存放c和d。然而不同的是,此时是将a和b的地址传递给c和d(即c和d中存放的是a和b的地址)。此时相当于c和d指向a和b,可以通过这个指向的箭头来对a和b存放的值做任意改动(这里是赋值成3和5)。所以理所当然得到如下的结果:
    在这里插入图片描述
    所以,将变量的地址传递出去是一件非常危险的事情哦,因为这样函数就可以通过地址任意修改变量的值了。

    引用传递

    变量的引用相当于给变量起了一个别名,两者指的其实是一个东西。所以运行下面的代码:

    #include <iostream>
    using namespace std;
    
    void change(int &c, int &d)
    {
       c = 3;
       d = 5;
    }
    
    int main()
    {
       int a = 1;
       int b = 1;
       change(a, b);
       cout << "a=" << a << endl;
       cout << "b=" << b << endl;
       return 0;
    }
    

    得到结果:
    在这里插入图片描述
    既然指的是同一个东西,当然a和b的值也就通过函数改变了。引用传递和地址传递起到了同样的效果,但书写和理解起来都似乎更简单一些

    展开全文
  • 传递(pass by value)是在调用函数时将实际参数 复制 一份传递到函数中,这样在函数中如果对 参数 进行修改,将不会影响到实际参数。传递对象往往为整型浮点型字符型等基本数据结构。 public class PassBy...
  • C语言地址传递和值传递简析

    千次阅读 2009-12-09 21:37:00
    不少同学在学到C语言的指针部分时感到很困惑,对经常提到的“值传递”和“地址传递”两个概念弄不明白。实际上,因为地址本身也可以作为一个特殊的“值”,所以地址传递也是一种特殊的值传递。只是为了强调其特殊性...
  • Java 是值传递还是引用传递

    万次阅读 多人点赞 2019-03-20 02:40:16
    最近整理面试题,整理到值传递、引用传递,到网上搜了一圈,争议很大。带着一脸蒙圈,线上线下查了好多资料。最终有所收获,所以分享给大家,希望能对你有所帮助。 首先说下我的感受,这个题目出的很好,但是在 ...
  • 函数参数的值传递和地址传递

    千次阅读 2017-03-09 16:50:35
    //但是可以修改指针所的值,如F1代码中将a[1]的值改为9; printf("2`-------%d\n", a[1]);//9 F2(&p); printf("3--------%d\n", *p);//9 //传址,pp=&p(指针的地址,即pp是指向指针的指针),*pp=*(&p)=p; ...
  • C语言:值传递 和地址传递 ----讲解透彻

    千次阅读 多人点赞 2014-10-19 17:23:06
    C语言地址传递和值传递简析 --------------------------------------------------------------------- 文档简介: 本文写作初衷是为了解决C语言初学者关于地址传递和值传递一直理解得不 ...
  • 关于这个问题,在StackOverflow上也引发过广泛的讨论,看来很多程序员对于这个问题的理解都不尽相同,甚至很多人理解...错误理解一:值传递和引用传递,区分的条件是传递的内容,如果是个值,就是值传递。如果是个引...
  • 五分钟学Java:Java到底是值传递还是引用传递

    千次阅读 多人点赞 2019-12-11 08:43:27
    在逛 Stack Overflow 的时候,发现了一些访问量像阿尔卑斯山一样高的问题,比如说这个:Java 到底是值传递还是引用传递?访问量足足有 188万+,这不得了啊!说明有很多很多的程序员被这个问题困扰过。实话实说吧,我...
  • Java到底是值传递?还是引用传递

    千次阅读 2016-02-17 14:23:43
    前言 最近和同事讨论算法效率问题无意中涉及到一个问题,java中调用方法的时候是值传递呢?...值传递将该值复制一份出来使用,比如a复制一份a1出来,a1做的操作不会影响到a。例子如下: public sta
  • 引用传递时,系统不是将实参本身的值复制后传递给形参,而是将其引用值(即地址值)传递给形参,因此,形参所引用的该地址上的变量与传递的实参相同,方法体内相应形参值得任何改变都将影响到作为引用传递的实参。...
  • 引用传递:就是地址传递。在方法进行调用时,实际参数的引用的是地址,而不是真正参数的值,方法执行中形式参数值的改变将会影响实际参数的值。 1:按值传递是什么 的是在方法调用时,传递的参数是按值的拷贝传递...
  • 传递和引用传递的区别

    千次阅读 2018-07-19 21:13:00
    传递基本数据类型在方法中的传递,引用传递引用数据类型在方法中的传递,举例来说,如下图程序代码运行所示: 注:int属于基本数据类型,因此在方法中进行传递和引用时,并不会改变该变量的数值 而arr...
  • 在JavaScript里调用函数传参的时候,经常对到底是参数是值传递还是引用传递混淆,这里来简单的验证下到底是怎么一回事。 首先我们得区分一下JS中栈和堆里存储的数据的区别,栈内存中主要存储的是一些基本类型的变量...
  • 参看:彻底高清值传递与地址传递的区别参看:值传递,引用传递与地址传递一、值传递当函数被调用的时候,形参被创建,调用时带的参数被拷贝到刚创建好的形参,函数结束时,形参被摧毁。由于是参数的一个副本被传递到...
  • 而关于值传递,指针传递,引用传递这几个方面还会存在误区, 所有我觉的有必要在这里也说明一下~下文会通过例子详细说明哦值传递:形参是...指针传递:形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实
  • Java值传递和引用传递详细说明

    千次阅读 2020-07-14 15:53:17
    学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨论的话题又是充满争议:有的论坛帖子说Java只有值传递,...
  • 很多人,包括我,受书本知识消化不...数组、对象等按地址(引用)传递。对此种观点,我们要谨慎。 var v1 = [] var v2 = {}; var v3 = {}; function foo(v1, v2, v3) { v1 = [1]; v2 = [2]; v3 = {a:3} } foo
  • 很多人,包括我,受书本...数组、对象等按地址(引用)传递。对此种观点,我们要谨慎。 var v1 = [] var v2 = {}; var v3 = {}; function foo(v1, v2, v3) {  v1 = [1];  v2 = [2];  v3 = {a:3} }
  • C语言函数传递与值传递

    千次阅读 2016-01-25 11:53:56
    另一种是参数传递,是一种地址传递,是将实参的地址赋值给形参,即形参和实参指向同一块内存空间,因此函数对形参对象的处理就是对实参的处理。C语言中实现地址传递的方法一般是将形参指定为指针类型。  为了提高...
  • 引用类型,地址传递,所以叫值传递。  当主函数的变量,对象(主本)传递到副函数时,传递的变量、对象(方法中的形参)其实都是副本,而副本的改变不会影响主 本。 基本类型:传递的是值的拷贝,也就是说传递...
  • JAVA 方法的参数是按值传递还是引用传递
  • 所谓引用传递是在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。 什么是值传递? 值传递是在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数...
  • Collection c1 Collection c2 c1.addAll(c2);
  • Java值传递,引用传递,数组的传递

    千次阅读 2017-08-12 10:48:44
    本文在转载了别人文章的基础上又加上了自己的...数组若传递的是引用则会改变原来数组中的值,若传递的是单个值则是值传递,不会改变原来数组的值 与其他语言不同,Java不允许程序员选择按值传递还是按引用传递各个参数
  • java中的参数传递-值传递、引用传递

    千次阅读 2017-04-12 16:38:05
    参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递。 在 Java 应用程序中永远不会传递对象,而只传递对象引用。因此是按引用传递对象。Java 应用程序按引用传递对象这一事实...
  • Python 值传递和引用传递

    千次阅读 2016-02-06 15:13:28
    传递和引用传递参考地址:http://www.dataguru.cn/thread-489552-1-1.htmlpython的值传递不会改变传入参数的值,而引用传递传入的是一个地址,有点类似c的指针,在执行完成之后会改变传入地址的值。值传递类型...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 319,028
精华内容 127,611
关键字:

地址传递是指