精华内容
下载资源
问答
  • 三种参数传递方式
    千次阅读
    2018-10-09 20:39:49

    在函数定义和调用时,有三种常见的参数传递方式:

    1.传值

    2.传指针

    3.传引用

     

    下面给出一个例子说明参数传递的三种方式

    #include<iostream>
    
    using namespace std;
    
    void swap1(int a,int b)
    {
        int t;
        t=a;
        a=b;
        b=t;
    }
    
    void swap2(int* a,int* b)
    {
        int t;
        t=*a;
        *a=*b;
        *b=t;
    }
    
    void swap3(int &a,int &b)
    {
        int t;
        t=a;
        a=b;
        b=t;
    }
    
    
    int main()
    {
        int x=10,y=20;
        swap1(x,y);
        cout<<x<<' '<<y<<endl;
        swap2(&x,&y);
        cout<<x<<' '<<y<<endl;
        swap3(x,y);
        cout<<x<<' '<<y<<endl;
        return 0;
    }

     

    特别说明:数组参数的传递方式属于特殊情况。数组作为形参按传值方式声明,但实际传递的是数组的首地址(即数组名),使得形参数组和实参数组共用同一组内存单元。

    因此性参数组所作的任何改变相当于在实参数组中进行相应的处理

     

    更多相关内容
  • 主要介绍了Python3中函数参数传递方式,结合实例形式较为详细的分析了Python3中函数参数传递的常见操作技巧,需要的朋友可以参考下
  • 实现参数传递的几种方式

    千次阅读 2017-08-03 10:55:26
    由于web系统采用http协议在浏览器和... 表单传递参数是一种最简单,也是最基本的参数传递方式。注意:表单元素隐藏按钮的使用  方式二:带参数的url方式传递  带参数的url写法: url?参数名1=值1&参数名2=值2。
     由于web系统采用http协议在浏览器和服务器之间传输数据,而http协议是一种无状态的协议,如何在不同页面 之间、或页面向后端传递数据,可以有一下几种方式
       方式一:表单方式传递
       表单传递参数是一种最简单,也是最基本的参数传递方式。注意:表单元素隐藏按钮的使用
       方式二:带参数的url方式传递
       带参数的url写法: url?参数名1=值1&参数名2=值2。
       方式三:请求request对象
       可以将数据绑定到request对象上,通过request对象getAttribute和setAttribute方法读写
       方式四:用户会话session对象
       可以将数据绑定到session对象上,通过session对象getAttribute和setAttribute方法读写
       方式五:application对象
       可以将数据绑定到application对象上,通过application对象getAttibute方法和setAttribute方法读写
       方式六:cookie对象
       可以将数据写到到客户端浏览器cookie文件中。

       其中方式一,方式二只能实现字符串参数的传递,方式三,四,五,六可以实现对象的传递(方式六需要对象序列化后进行存储)
       方式一,方式二,方式三数据传递只能请求页面获取数据,而方式四,五,六可以在多个不同页面获取数据对象
       方式四和六保存的数据对象都是和某个用户相关的信息,不同的是方式四将数据保存到服务器内存中,方式六将数据保存到客户端内存中。
       方式五保存的数据对象都是和所有用户相关的信息,数据也是保存到服务器内存中
    展开全文
  • 详解C++参数传递的三种方式

    千次阅读 2020-07-19 16:58:30
    习惯上大家把参数传递分为三种方式,但是从本质上来说,值传递和地址传递是一种,都是“传值方式”,只不过地址传递的值是一个地址罢了。引用传递才算是真正意义上的“地址传递方式”。 第二种地址传递方式是一般...

    目录

    写在最前

    一、【值传递】---将变量名作为实参和形参

    二、【地址传递】或叫【指针传递】---传递变量的地址

    三、【引用传递】---真正的传址方式


    写在最前

    习惯上大家把参数传递分为三种方式,但是从本质上来说,值传递和地址传递是一种,都是“传值方式”,只不过地址传递的值是一个地址罢了。引用传递才算是真正意义上的“地址传递方式”。

    第二种地址传递方式是一般不用的,需要修改实参,我们就用引用传递,不需要修改,就直接值传递。

     安利一下我的另外两篇与此内容相关的博客,一起食用效果更佳。     

            简单清晰的理解c++指针    https://blog.csdn.net/qq_21989927/article/details/107441621

            C++实现swap功能的常见方式和常见的几种错误  https://blog.csdn.net/qq_21989927/article/details/107445722

    一、【值传递】---将变量名作为实参和形参

    形式参数和实际参数:形参是函数定义时括号中的变量,实参是调用函数时用到的实际变量。

    #include<iostream> 
    using namespace std;
    
    void Find(int x){
    	x=x+100;
    	cout<<x<<" "<<&x<<endl;
    }
    
    int main(){	
    	int a=5;
    	cout<<a<<" "<<&a<<endl;
    	Find(a);
    	cout<<a<<" "<<&a<<endl; 
    } 

    结果:

    可以发现,形参x的值的改变,并不会影响实参a的值,并且x的地址和a是不一样的,在调用函数时x获得了地址分配,也就说说形参和实参不是同一个存储单元。

    1.在定义函数时指定的形参,在未出现函数调用时,他们并不占内存 中的存储单元,因此称他们为形式参数或者虚拟参数,表示他们并不是实际存在的数据,只有发生函数调用时,形参才被分配内存,以便接收来自实参传来的数据,在调用结束后,形参所占用的内存单元会被释放。

    2.实参变量对形参变量的数据传递是“值传递”,即为单向传递,只能由实参传递给形参,而不能由形参传回实参。

    3.值传递和指针传递,传递的都是实参的一份拷贝。

     

    二、【地址传递】或叫【指针传递】---传递变量的地址

    经典例题:交换两个数字

    #include <iostream>
    using namespace std;
    void swap(int *p,int *q){
    	cout<<"*p="<<*p<<" *q="<<*q<<endl; 
        int temp;
        temp=*p;
        *p=*q;
        *q=temp;
        cout<<"*p="<<*p<<" *q="<<*q<<endl; 
    }
    int main(){
    	int x=5,y=10;
    	swap(&x,&y);
    	cout<<x<<" "<<y<<endl;	
    	return 0;
    }

    结果:


    实参是两个地址&x,&y 形参两个指针变量是*p,*q,传入函数的是x,y的地址。相当于进行操作 int *p=&x; int *q=&y;即定义了两个指针分别指向两个变量。交换前*p所指向的是x的值5,*q所指向y的值10。
    交换的时候,定义了一个整型变量temp,用来交换*p,*q,也就是5和6。交换的是指针所指向的内容
    交换完成后,指针*p还是指向x,但是x的值已经和y交换了。

    不能试图通过改变形参指针变量的值而使实参指针变量的值改变。

    调用函数时不会改变实参指针变量的值,但是可以改变实参指针变量所指向变量的值。

    地址传递这种方式有点儿绕,因为他想修改的是实参的值,而形参的改变无法改变实参,才被迫向函数传入了实参的地址,用来修改实参,所以这个方式的本质还是传值,只不过这个值是个地址罢了。并且实际操作的过程中,写法也很凌乱,比如你要操作实参x,就需要一直用*p来代替,而这个*怎么看怎么奇怪。所以接下来的引用传递,就是为了解决这个问题,引用传递才是真正意义上传入了实参。

     

    三、【引用传递】---真正的传址方式

    先来了解什么是引用:

    引用是对一个数据起一个别名,这是C++对C的一个扩充功能。引用本质上是一个指针常量。

    int a=5;                //定义一个变量a

    int &b=a;             //声明b是a的引用

    这里的&,不再是取地址符,而是引用声明符。

    在数据类型后面出现的&都是引用声明符,在其他场合出现的是取地址符。

    #include <iostream>
    using namespace std;
    void swap(int &a,int &b){  //&a是a的引用声明,不是取地址 
    	int temp=a;
    	a=b;
    	b=temp;
    }
    int main(){
    	int x=5,y=10;
    	swap(x,y);
    	cout<<x<<" "<<y<<endl;
    	return 0;
    }

    a,b是x,y的引用,也就是说a,b和x,y是等效的,交换了a,b,也就交换了x,y。

    至于深刻的理解,可以不必探究,因为引用就是为了简化指针的难度。

    想深刻了解引用,可以查看我的这一篇:

    有了引用,再也不用担心令人烦恼的C++指针了https://blog.csdn.net/qq_21989927/article/details/107447970

    展开全文
  • 跟老齐学Python之总结参数传递

    千次阅读 2020-12-09 13:21:26
    下面总结通过总结常见的函数参数定义方式,来理解参数传递的流程。def foo(p1,p2,p3,...)这种方式常见了,列出有限个数的参数,并且彼此之间用逗号隔开。在调用函数的时候,按照顺序以此对参数进行赋值,特备注意...

    就前面所讲,函数的基本内容已经完毕。但是,函数还有很多值得不断玩味的细节。这里进行阐述。

    参数的传递

    python中函数的参数通过赋值的方式来传递引用对象。下面总结通过总结常见的函数参数定义方式,来理解参数传递的流程。

    def foo(p1,p2,p3,...)

    这种方式最常见了,列出有限个数的参数,并且彼此之间用逗号隔开。在调用函数的时候,按照顺序以此对参数进行赋值,特备注意的是,参数的名字不重要,重要的是位置。而且,必须数量一致,一一对应。第一个对象(可能是数值、字符串等等)对应第一个参数,第二个对应第二个参数,如此对应,不得偏左也不得偏右。

    >>> def foo(p1,p2,p3):

    ...     print "p1==>",p1

    ...     print "p2==>",p2

    ...     print "p3==>",p3

    ...

    >>> foo("python",1,["qiwsir","github","io"])    #一一对应地赋值

    p1==> python

    p2==> 1

    p3==> ['qiwsir', 'github', 'io']

    >>> foo("python")

    Traceback (most recent call last):

    File "", line 1, in

    TypeError: foo() takes exactly 3 arguments (1 given)    #注意看报错信息

    >>> foo("python",1,2,3)

    Traceback (most recent call last):

    File "", line 1, in

    TypeError: foo() takes exactly 3 arguments (4 given)    #要求3个参数,实际上放置了4个,报错

    def foo(p1=value1,p2=value2,...)

    这种方式比前面一种更明确某个参数的赋值,貌似这样就不乱子了,很明确呀。颇有一个萝卜对着一个坑的意味。

    还是上面那个函数,用下面的方式赋值,就不用担心顺序问题了。

    >>> foo(p3=3,p1=10,p2=222)

    p1==> 10

    p2==> 222

    p3==> 3

    也可以采用下面的方式定义参数,给某些参数有默认的值

    >>> def foo(p1,p2=22,p3=33):    #设置了两个参数p2,p3的默认值

    ...     print "p1==>",p1

    ...     print "p2==>",p2

    ...     print "p3==>",p3

    ...

    >>> foo(11)     #p1=11,其它的参数为默认赋值

    p1==> 11

    p2==> 22

    p3==> 33

    >>> foo(11,222)     #按照顺序,p2=222,p3依旧维持原默认值

    p1==> 11

    p2==> 222

    p3==> 33

    >>> foo(11,222,333)  #按顺序赋值

    p1==> 11

    p2==> 222

    p3==> 333

    >>> foo(11,p2=122)

    p1==> 11

    p2==> 122

    p3==> 33

    >>> foo(p2=122)     #p1没有默认值,必须要赋值的,否则报错

    Traceback (most recent call last):

    File "", line 1, in

    TypeError: foo() takes at least 1 argument (1 given)

    def foo(*args)

    这种方式适合于不确定参数个数的时候,在参数args前面加一个*,注意,仅一个哟。

    >>> def foo(*args):         #接收不确定个数的数据对象

    ...     print args

    ...

    >>> foo("qiwsir.github.io") #以tuple形式接收到,哪怕是一个

    ('qiwsir.github.io',)

    >>> foo("qiwsir.github.io","python")

    ('qiwsir.github.io', 'python')

    上一讲中已经有例子说明,可以和前面的混合使用。此处不赘述。

    def foo(**args)

    这种方式跟上面的区别在于,必须接收类似arg=val形式的。

    >>> def foo(**args):    #这种方式接收,以dictionary的形式接收数据对象

    ...     print args

    ...

    >>> foo(1,2,3)          #这样就报错了

    Traceback (most recent call last):

    File "", line 1, in

    TypeError: foo() takes exactly 0 arguments (3 given)

    >>> foo(a=1,b=2,c=3)    #这样就可以了,因为有了键值对

    {'a': 1, 'c': 3, 'b': 2}

    下面来一个综合的,看看以上四种参数传递方法的执行顺序

    >>> def foo(x,y=2,*targs,**dargs):

    ...     print "x==>",x

    ...     print "y==>",y

    ...     print "targs_tuple==>",targs

    ...     print "dargs_dict==>",dargs

    ...

    >>> foo("1x")

    x==> 1x

    y==> 2

    targs_tuple==> ()

    dargs_dict==> {}

    >>> foo("1x","2y")

    x==> 1x

    y==> 2y

    targs_tuple==> ()

    dargs_dict==> {}

    >>> foo("1x","2y","3t1","3t2")

    x==> 1x

    y==> 2y

    targs_tuple==> ('3t1', '3t2')

    dargs_dict==> {}

    >>> foo("1x","2y","3t1","3t2",d1="4d1",d2="4d2")

    x==> 1x

    y==> 2y

    targs_tuple==> ('3t1', '3t2')

    dargs_dict==> {'d2': '4d2', 'd1': '4d1'}

    通过上面的例子,看官是否看出什么名堂了呢?

    展开全文
  • 1. url查询参数 GET http://localhost:10020/query?name=%E4%B8%BD%E4%B8%BD&age=123 HTTP/1.1 //...省略 2. url路径参数,作为url的一部分 GET http://localhost:10020/query/100 HTTP/1.1 //......
  • python传递参数方式小结

    千次阅读 2021-01-14 15:55:01
    本文实例总结了python传递参数方式。分享给大家供大家参考。具体分析如下:当形参如*arg时表示传入数组,当形参如**args时表示传入字典。输出:python中定义一个函数,可以通过正常的只传入值或key-value的方法调用...
  • 一、请求参数传递方式 1、GET 请求方式 GET 请求方式参数放置在请求地址中进行传递。 xhr.open('get', 'http://www.example.com?name=zhangsan&age=20'); 传递GET 请求参数代码示例: <!DOCTYPE html> ...
  • Python中函数传递参数有四种形式

    千次阅读 2019-12-10 15:39:40
    Python中函数传递参数有四种形式 fun1(a,b,c) fun2(a=1,b=2,c=3) fun3(*args) fun4(**kargs) 四种中最常见是前两种,基本上一般点的教程都会涉及,后两种一般很少单独出现,常用在混合模式中 第一种 fun1(a,b,c)...
  • django教程--参数传递(GET方式

    万次阅读 2018-01-13 21:41:07
    django教程–参数传递(GET方式)web开发过程中最常见的两种参数传递方式为GET和POST,今天我们就来了解下Django中如何使用GET进行参数传递。
  • Linux Shell 参数传递多种方式

    千次阅读 2019-02-18 22:56:00
    Linux Shell 参数传递多种方式 背景 最近编写ansible脚本,需要自动调用之前写好的shell脚本,由于shell脚本中包含了read命令接收用户的手动输入,为了实现ansible脚本的自动运行,不得不将手动输入...
  • c#的三种参数传递方式

    千次阅读 2018-08-09 14:52:26
    该种类型的参数传递变量地址给方法(引用传递),传递前变量必须初始化。 该类型与out型的区别在与: 1).ref 型传递变量前,变量必须初始化,否则编译器会报错, 而 out 型则不需要初始化 2).ref 型传递变量,...
  • C/C++和python中的函数参数传递

    千次阅读 2022-03-26 11:34:54
    目录一、C/C++中的函数参数传递二、python中函数的参数传递问题 一、C/C++中的函数参数传递 1.C/C++中的普通参数传递和指针参数传递本质上都是值传递,只不过当使用指针接收实参传递的时候,传过来的是地址,所以...
  • 一、子程序定义 子程序名 PROC NEAR|FAR  .  .  RET 子程序名 ENDP ...子程序名相当于标号,表示本过程的符号地址...过程NEAR和FAR两种类型,FAR型的过程可供段间调用,NEAR型过程仅供段内调用。 在一个过...
  • vue路由跳转传递参数方式总结

    千次阅读 2020-12-29 11:07:20
    日常业务中,路由跳转的同时传递参数是比较常见的,传参的方式有三种:1)通过动态路由方式//路由配置文件中 配置动态路由{path: '/detail/:id',name: 'Detail',component: Detail}//跳转时页面var id = 1;...
  • 如何在Java中将函数作为参数传递

    千次阅读 2021-02-12 12:23:10
    这个问题在这里已答案:Java Pass方法作为参数 14个答案是否可以将方法作为参数传递给Java方法? 如果是这样,人可以指导我吗? 这似乎并不重要Jason asked 2019-01-26T17:30:56Z8个解决方案379 votesJava 8及...
  •  本章讲解SpringMVC的参数传递和其跳转方式 方法 1.概念 我们知道,SpringMVC用来简化控制层的编写,代替以前的servlet。但是我们前台的参数是怎样传递到控制层去使用呢?控制层怎样进行页面的跳转呢?就这些...
  • SystemVerilog中子程序调用与参数传递

    千次阅读 多人点赞 2019-04-13 17:11:04
    在SystemVerilog中新定义一种端口类型 "ref "传递变量地址而非变量本身。 1. 传递传递值是子程序传递参数的默认机制。...参数巨大时使用该方式传递参数是不可取的。 // 传递值的方式如下: function...
  • jQuery前端参数传递方案

    万次阅读 2020-09-28 08:24:23
    前端参数传递方案 需求 在页面之间进行传值的时候,如果遇到参数长度非常大的时候,我们直接url传值会400错误, 参数太长。我们当然可以把参数经过post后台传递,但是请求产生的网络开销呢?下面介绍几种方式好...
  • 在定义路由URL时,可以使用正则表达式提取参数的方法从URL中获取请求参数,Django会将提取的参数直接传递到视图的传入参数中。 未命名参数按定义顺序传递, 如 url(r'^weather/([a-z]+)/(\d{4})/$', views....
  • VBA过程调用和参数传递

    千次阅读 2020-07-28 11:05:23
    参数传递,按址传递: Option Explicit Sub demo() Dim n As Long '乘以十输出 n = InputBox("你没个月工资多少,诚实说:") Call nTimesTen(n) MsgBox "乘10说的话,我工资一个月" & n & "块" End Sub Private Sub ...
  • 页面之间传递参数得几种方法

    千次阅读 2019-01-08 02:20:09
    这个方法相比上面介绍的方法稍微复杂一点,但在页面间值传递中却是特别有用的,使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,你需要额外写一些代码以创建一些属性以便可以在...
  • 这种方式适用于get/post方法,也是一种最简单、最直观的参数传递方式,不过由于过于直观(数据显示在浏览器地址栏中),不建议使用此种方式传递敏感数据。 http请求示例: GET ...
  • 前端与后端参数传递

    千次阅读 2020-10-14 14:35:05
    我们常见有传递 int, string, bool, double, decimal 等类型。 需要注意的是前台传递参数和后台Action 中的参数名称需要保证一致,否则 MVC 无法完成值的绑定。 前台代码: //传递基本的数据类型 $('#btn1').on('...
  • 一、url拼接(form表单也是通过参数拼接传递的) 这个一种是window.open传递(该方法一般会跳转新的窗口),一种是window.location.href(该方法一般新页面显示在旧界面上) 两者区别请看该链接:...
  • Vue请求传递参数

    千次阅读 2021-03-03 21:45:53
    get请求没有请求体,传递参数是添加到url字符串的后面:url?name=value&name1=value1。 1、直接拼接 axios({ method: "get", url: "http://localhost:1111/01/zc?yhm=lhj&pwd=123", //参数拼接在url后面...
  • Javaweb的八种传值方式

    千次阅读 2021-02-12 20:30:36
    1.表单提交html自带的from方法,简单...其中由method属性决定以post或者get方式进行提交。jsp代码:账号:密码:java代码(根据name属性获取参数):String user = request.getParmeter("user_name");String user = requ...
  • Java中将函数作为参数进行传递

    千次阅读 2021-03-18 22:19:56
    Java中将函数作为参数进行传递 现在了解到的两种:Java8之前,一个常见的模式是将它“包装”在一个界面中,例如Callable接口,然后传入一个Callable。Java8以及之后就是今天学到的一种方法,通过Java8的新特性...
  • vue中路由跳转传递参数的三种方式

    万次阅读 多人点赞 2019-03-07 21:06:55
    日常业务中,路由跳转的同时传递参数是比较常见的,传参的方式有三种: 1)通过动态路由方式 //路由配置文件中 配置动态路由 { path: '/detail/:id', name: 'Detail', component: Detail } //跳转时页面 var ...
  • C++ 参数的三种传递

    万次阅读 多人点赞 2019-05-08 19:45:43
    值传递是我们常见传递方式,不管是在C#还是JAVA,都是值传递的,C++也不例外,那么指针和引用则和值传递不同,不同之处呢,则是它们传递东西不同,都是都可以把一个值传给某个函数使用,它们不同之处我们通过...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 345,668
精华内容 138,267
关键字:

常见的参数传递方式有哪些