精华内容
下载资源
问答
  • 函数形参中值传递与地址传递

    函数形参中有两种传值方式,直接传值与间接的地址传值。下面说说这两种方式的差别:

    值传递

    形参中值传递,并不会改变原值的数据。因为原址只是拷贝一份数据传进去,修改的值是拷贝的数据。

    void swap(int a,int b)
    {
        int c = a;
        a = b;
        b = c;
        printf("func: a = %d, b = %d\n",a,b);
    }
    
    int main()
    {
        int a = 10;
        int b = 20;
        swap(a,b);
        printf("a = %d, b = %d\n",a,b);
    }
    

    结果

    func: a = 20, b = 10
    a = 10, b = 20
    

    值传递
    可以看到原先的a,b值并没有改变,因为传进函数的是原值的拷贝,函数一运行结束,这些拷贝的变量就会被系统回收,函数内部的数据处理与函数外部的原值一点联系也没有。值传递没法改变原值的数据。

    地址传递

    使用地址传递,可以在函数内部通过*间接操作来改变函数外部的原值。

    void swap(int *a,int *b)
    {
        int c = *a;
        *a = *b;
        *b = c;
        printf("func: a = %d, b = %d\n",*a,*b);
    }
    
    int main()
    {
        int a = 10;
        int b = 20;
        swap(&a,&b);
        printf("a = %d, b = %d\n",a,b);
    }
    

    结果

    func: a = 20, b = 10
    a = 20, b = 10
    

    地址传递
    使用地址传递,函数内部的拷贝变量与函数外部的变量有关联,拷贝变量指向原值得地址,这样可以通过*间接操作修改原值。

    使用值传递的场景

    如果并不需要改变原值,只是通过原来原值来得到一些数据。比如求和,遍历数组等等这些函数,可以使用值传递当作形参,然后返回需要的数据。例如:

    int add(int a,int b)
    {
        return a+b;
    }
    
    int main()
    {
        int a = 10;
        int b = 20;
        int sum = add(a,b);
        printf("sum = %d\n",sum);
    }
    

    结果

    sum = 30
    

    使用地址传递的场景

    如果需要某个函数体来改变函数外部的值,且开辟在栈的内存中,就只能使用地址传递来实现。

    //求绝对值
    void myabs(int *a)
    {
        if(*a < 0) *a = -(*a);
    }
    
    int main()
    {
        int a = -10;
        myabs(&a);
        printf("b = %d\n",a);
    }
    

    地址传值的形式

    我们如果想要传进去的值改变函数外部的值,就使用地址传递,但是有时形参的数据类型不清楚,下面说一种方法,就是形参总是比原值的数据类型多一个*。这很好理解,想一下获得某个int类型的变量地址,就要定义int指针类型,如果是获得int类型的地址,就定义int**类型的变量接收。

    int a;
    //形参
    int * b;
    
    int *a;
    //形参
    int **b;
    

    总之就是形参的数据类型总是比原值的数据类型多一个*,使用时传值记得使用&,不然报错。
    微信号

    展开全文
  • * 方法形参传递机制:值传递 * * 1. 形参:方法定义时,声明的小括号内的参数 * 实参:方法调用时,实际传递形参的值 * * 2. 值传递机制: * 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值...

    /*
     *  方法形参的传递机制:值传递
     *  
     *  1. 形参:方法定义时,声明的小括号内的参数
     *     实参:方法调用时,实际传递给形参的值
     * 
     * 2. 值传递机制:
     *      如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值
     *      如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值
     * 
     * 
     * 
     */

    展开全文
  • 方法的形参传递机制:值传递 1.形参:方法调用时,声明的小括号内的参数 实参:方法调用时,实际传递形参的数据 2.传递机制: 如果参数是基本数据类型,此时实参赋值给形参的是实参真实存储的数据值。 如果变量...

    根据尚硅谷宋红康老师的java基础视频总结
    网址:https://www.bilibili.com/video/BV1Qb411g7cz?p=208
    方法的形参的传递机制:值传递

    1.形参:方法调用时,声明的小括号内的参数
    实参:方法调用时,实际传递给形参的数据

    2.传递机制:
    如果参数是基本数据类型,此时实参赋值给形参的是实参真实存储的数据值。
    如果变量是引用数据类型,此时实参赋值给形参的是实参存储数据的地址值。

    public class ValueTransferTest {
           public static void main(String[] args) {
                 Data data = new Data();
                 data.m = 10;
                 data.n = 20;  
                 System.out.println("m = " + data.m + ",n = " + data.n);
                 ValueTransferTest test = new ValueTransferTest();
                 test.swap(data);
                 System.out.println("m = " + data.m + ",n = " + data.n);       
           }
           public void swap(Data data) {
                 int temp = data.m;
                 data.m = data.n;
                 data.n = temp;
           }
    }
    class Data{
           int m;
           int n;
    }
    
    展开全文
  • C++数组作为形参进行传递

    C++数组作为形参进行传递

    相关网址

    键盘输入字符串数组

    在这里插入图片描述
    当输入字符少于100时,字符数组后面位数出现错误,如图所示。
    使用 n = sizeof(a)时,显示n = 100,并不是你输入字符串个数。
    在这里插入图片描述
    但是输出结果仍然是正确的,如下图所示。
    在这里插入图片描述

    在这里插入图片描述
    对代码进行如下修改,即对数组赋初值,之后数组进行输入;
    在这里插入图片描述
    结果如下:
    在这里插入图片描述

    展开全文
  • 实参到形参传递

    2018-02-18 15:52:58
    函数调用时,实参传递形参时的转换问题? 要点: 参数的传递就是用实参初始化对应的形参。 非引用形参: 基本的情况:复制实参的值。函数并没有访问调用函数所传递的实参本身,所以不会改变实参的值。 ...
  • 这是最普通,也是最简单的形参传递了。 参数传递,即是使用实参副本(注意啊,是副本,不是实参本身)来初始化形参; 因此,在函数体内对形参的修改不会影响实参的值。 如果形参是指针类型的,那么函数体内是否可以...
  • C++:数组形参传递

    千次阅读 2019-01-15 09:59:57
    不允许拷贝:无法以值传递的方式使用数组形参 使用数组时通常都会转换为指针:当我们为函数传递一个数组时,实际上传递的是指向数组首元素的指针。 传参的方法 当下有一个数组int j[2]={0,1},我们自写了一个函数 ...
  • 指针做形参形参传递详解

    千次阅读 2015-06-16 18:55:01
    1.需要传递一级指针的数组时: 例如标准C的main函数: int main(int argc, char*[] argv),数组最高维可以退化,char*[] argv等价于char** argv。这里argv代表命令行参数数组。 2.需要对传入的一级指针进行...
  • 实参与形参传递关系

    千次阅读 2016-04-22 13:04:44
    这种情况下,实参是把值传递形参形参在函数中改变值不会影响实参。 2、传递实体对象: 这种情况中,实参实际是把对象在堆栈中的地址传递形参。当形参变量调用方法改变值时,其实改变的是指向这个对象的值,...
  • #include<stdio.h> hanshu(int a,int b) { int k,s=0; for(k=a;k<a+b;k++) s+=k; printf("%d,",s); return (s); } main() { int s=0; hanshu(2,3);...这是函数的数值传递,不是地址传递,因...
  • 参数的传递就是用实参初始化对应的形参。 非引用形参: 基本的情况:复制实参的值。函数并没有访问调用函数所传递的实参本身,所以不会改变实参的值。void swap(int x, int y) { int tmp; tmp = x; x = y; ...
  • 【day0403】C++ 数组形参传递

    千次阅读 2016-04-03 21:42:10
    # 数组是C/C++重要的一个知识点,C++的字符串又不同于...今天写点代码试试函数参数传递--数组形参 * 三种传递数组的写法 * 数组实参:数组名--指向数组首地址的一个指针 * 通过医用传递数组 * 二维(多维)数组的传递
  • 指针形参实参传递时需要注意

    千次阅读 2015-05-30 10:39:48
    指针形参实参传递时需要注意: 主调函数中实参指针传给被调函数的形参指针时,意味着两个指针指向同一块内存单元。这种情况下在被调函数中通过形参指针对内存区进行操作后,极有可能带来两个指针(形参指针和实参...
  • 关于C++中实参形参传递问题

    千次阅读 2015-05-17 20:29:28
    关于C++中实参形参传递问题  以下文章转载自http://blog.sina.com.cn/s/blog_5ff6e6ed0100dcog.html   函数中参数的传递 这里说的传递当然是指 实参是如何传递形参的啦 还挺复杂...
  • 今天又是遇到很久之前的一个问题,形参在数据传递的过程中,参数的值竟然变了然后嘞在接收参数的那里(\''+name+'\')注意点就是把传递的数字当作字符串来传递...
  • C++中数组作为形参进行传递(转) 有两种传递方法,一种是function(int a[]); 另一种是function(int *a) 这两种两种方法在函数中对数组参数的修改都会影响到实参本身的值! 对于第一种,根据之前所学,形参是实参...
  • C语言中实参与形参传递

    千次阅读 2019-09-29 18:13:22
    因为在实参给形参传递的过程中,形参只是实参的一个临时拷贝,一个临时地址,用完自动销毁,如图,可以明显的看出实参a,b和形参x,y的地址明显不同。 第一种方法只是把实参a,b的值传递给形参x,y, 所以形参x,y...
  • java形参传递情况

    2021-03-02 19:55:53
    1.当把对象作为方法形参传入时,是传入地址,同时新建另一个对象,那么将会新建一个方法对象,change()方法将丢失传入的形参地址。 2.当新建一个对象保存形参时,得以保存 3.当时如果改变转入形参的地址,...
  • 形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。 实参出现在主调函数中,进入被调函数后,实参变量也不能使用,无法修改。 调用 形参变量只有在被调用时才分配内存单元,在调用结束...
  • 在剑指offer中有道二维数组查找的问题,需要进行二维数组的参数传递,经过查阅知道对二维数组进行参数传递时,形参需要知道第二维的维度。 函数原型如下:bool search(int a[][4],int key,int rows,int columns) {...
  • 二维数组作为形参传递

    千次阅读 2019-04-05 00:39:16
    代码实例: #include<iostream> #include<cstdio> #include<...void func1(int arr[][5])//传递数组,需生命数组第二维的大小 { for(int i=0;i<5;i++){ for(int j=0;j<5;j...
  • 函数 ...向函数中传递任意参数,这样打印出的结果就可以根据自己的选择,做出改变。即是下一节讲到的形参 1 #向函数传递信息 2 3 def greet_user(username): 4 """显示简单的问候语""" 5 p...
  • Linux C语言中形参传递

    2018-01-05 16:03:16
    我们在编程时经常会遇到这样的情况,需要编写一个函数,需要该函数能够返回传递一个大字符...0x01 int型形参传递 整形参数传递很简单,可以直接使用,比如: 使用指针: #include int test(int *a){ *a=10; retu
  • 函数形参传递

    2012-05-14 15:51:30
    写一个小程序,编译链接都木有问题,但是运行就会...后来单步运行发现,一个参数作为子函数形参传递,该参数在子函数中的值被改变为预期的值,但是主函数中该参数没有变化,最终原因确定为自己写子函数的时候,只是将
  • STL之容器作为形参传递

    千次阅读 2017-04-14 21:45:46
    眼高手低,一看就会,一写就错,刚刚想起来用容器,结果连怎么传参数都忘了。 ... STL中的容器是个神器,第一次接触时,甚是感到...vect可以理解为数组,这个数组比较特殊,不用考虑长度,溢出等问题,系统都给我们做好
  • 1.指针形参:实现指针指向的值的交换(指针本身不变) 函数的形参是指针时,将复制实参指针,形参的任何改变仅作用于实参的局部副本,如果函数将新指针赋给形参,主调函数使用的实参指针本事的值没有变化。 代码如下...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 143,398
精华内容 57,359
关键字:

形参可以传递吗