精华内容
下载资源
问答
  • 汇编主程序与子程序参数传递方式

    千次阅读 2018-12-22 10:57:43
    实现方法是在主程序中把要传递参数放在某一指定的寄存器中,然后从子程序中取出指定的寄存器参数。 2、约定单元法: 入口参数和出口参数都放在事先约定好的单元中,子程序可以直接访问该变量。 优点:不占用...

     

    1、寄存器法

    最常用的方法,使用方便,由于cpu寄存器个数的限制,一般用于参数较少的情况。实现方法是在主程序中把要传递的参数放在某一指定的寄存器中,然后从子程序中取出指定的寄存器参数。

    2、约定单元法:

    入口参数和出口参数都放在事先约定好的单元中,子程序可以直接访问该变量。

    优点:不占用寄存器、参数个数任意、每个子程序要处理的数据和送出的结构都有独立的存储单元。

    缺点:占用一定数量的存储单元,增加编程中对变量定义的难度。

    3、堆栈法

    堆栈法是利用堆栈来传递参数的,适用于参数多、子程序嵌套调用和递归调用的情况,调用前先将参数压入堆栈,子程序从堆栈中取出参数。

    优点:参数不占用寄存器,和存储单元。参数存放在公共堆栈区,处理完后客恢复。参数个数一般不限

    缺点:由于参数和子程序混杂在一起,存取参数时候必须小心计算它在堆栈中的位置。要注意断点的保存和恢复。

    4、参数表法

    这种方法是把参数组成的一张参数表放在内存或者外设中,然后用寄存器将表地址传递给子程序。适用于大量参数的传递。
     

    展开全文
  • 函数参数三种传递方式的区别

    万次阅读 2017-01-07 13:47:00
    问题提出:1、当一个类的对象作为实参数传递时,使用值传递和引用传递什么区别? 比如: DateType ExampleFun(CString &strFileName,…)与 DateType ExampleFun(CString strFileName,…)解答之前,我们先来看2...

    函数参数三种传递方式的区别

    问题提出:

    1、当一个类的对象作为实参数传递时,使用值传递和引用传递有什么区别?
    比如: DateType ExampleFun(CString &strFileName,…)与
    DateType ExampleFun(CString strFileName,…)

    解答之前,我们先来看2个基本的概念:形参和实参。

    ->通俗的讲:形参是形式上的参数,实参是实际的参数;
    ->详细的讲:形参只是对实参的一种抽象类型描述,只是声明一个函数(方法)能接受什么类型的实参,而不确定接受的实参具体内容是多少;

    实参就是传递给函数(方法)对应形参的具体内容(值),形参的初始指(内容)由实参决定.形参在函数(方法)结束返回后就被释放了.

    现在进入主题:参数传递方式分:传值和传址;
    1.传值方式,只是将实参的值的拷贝传递给函数(方法),在方法内对形参进行操作,其对象是实参的拷贝,对实参不能造成影响.在方法结束返回后,形参被释放丢弃,实参的内容并不会改变;

    2.传址方式,将实参的地址传递给函数(方法),在方法内对形参进行操作即等于对实参进行相同的操作,在方法结束返回后,形参同样被释放,实参的内容将会是对形参进行操作的结果.

    而传址方式,又可以细分为:引用传递(pass-by-reference) , 指针传递(pass-by-pointer)

    引用其实就是对象的别名,传对象的引用,用于把一个对象的地址作为参数传过去,而不是对象本身。

    这是我们就明白了前面问题的答案:传递引用,避免了一次实参到形参的拷贝,提高了效率。

    使用引用参数的原因:
    1. 程序员能够修改调用函数中的数据对象

    1. 通过传递引用而不是整个数据对象,可以提高程序的运行速度。

      当数据对象较大时(如结构和类对象),第二个原因最重要,这些也是使用指针参数的原因。这是有道理的,因为引用参数实际上是基于指针的代码的另一个接口。

    那么什么时候使用引用、什么时候使用指针?什么时候又应该按值传递呢?下面是一些指导原则:

    对于使用传递值而不做修改的函数:

    1. 如果数据对象较小,如内置数据类型或者小型结构,则按值传递。

    2. 如果数据对象是数组,则使用指针,因为这是唯一的选择,并将指针声明为指向const的指针。

    3. 如果数据对象是较大的结构,则使用const指针或const引用,以提高运行效率。这样可以节省复制结构所需的时间和空间。

    4. 如果数据对象是类对象,则使用const引用。类设计的语义常常要求使用引用,这是C++增加引用特性的主要原因。因此,传递类对象参数的标准方式是按引用传递。

    对于修改调用函数中数据的函数:

    1. 如果数据对象是内置数据类型,则是用指针。如果看到诸如fixit(&x)这样的代码(其中x是int型),则很明显,该函数将修改x。

    2. 如果数据对象是数组,则只能使用指针。

    3. 如果数据对象是结构,则使用引用或指针。

    4. 如果数据对象是类对象,则使用引用。

    当然,这只是一些指导原则,很可能有充分的理由做出其他的选择。如:对于基本类型,cin使用引用。因此可以使用cin>>n, 而不是cin>>&n 。

    另外找了其他的资料:

    1.

    什么是“引用”?申明和使用“引用”要注意哪些问题?

    引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。

    申明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的引用。

    会调用拷贝构造函数和析构函数

    A a(){…;return *this;}
    A& a(){…;return *this;}
    不会调用拷贝构造函数和析构函数
    应该都能够作为左值

    当返回一个变量时,会产生拷贝。当返回一个引用时,不会发生拷贝,你可以将引用看作是一个变量的别名,就是其他的名字,引用和被引用的变量其实是一个东西,只是有了两个名字而已。

    问题的关键是,当你想要返回一个引用而不是一个拷贝时,你要确保这个引用的有效性,比如:
    int & fun() { int a; a=10; return a; }
    这样是不行的,因为a会在fun退出时被销毁,这时返回的a的引用是无效的。
    这种情况下,如果fun的返回类型不是int & 而是int就没有问题了。

    因此,要返回一个引用时,“临时变量”不能是“临时”的,至少得等函数外部使用完毕这个引用之后,才能销毁它。

    2.返回引用的好处:

    1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。

    (2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。

    (3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用”*指针变量名”的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。而引用更容易使用,更清晰。

    3 在什么时候需要使用“常引用”?

    如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。常引用声明方式:const 类型标识符 &引用名=目标变量名;

    例1

    int a ;

    const int &ra=a;

    ra=1; //错误

    a=1; //正确

    例2

    string foo( );

    void bar(string & s);

    那么下面的表达式将是非法的:

    bar(foo( ));

    bar(“hello world”);

    原因在于foo( )和”hello world”串都会产生一个临时对象,而在C++中,这些临时对象都是const类型的。因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。

    引用型参数应该在能被定义为const的情况下,尽量定义为const 。

    1. 将“引用”作为函数返回值类型的格式、好处和需要遵守的规则?

    格式:类型标识符 &函数名(形参列表及类型说明){ //函数体 }

    好处:在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的。因为随着该局部变量生存期的结束,相应的引用也会失效,产生runtime error!

    注意事项:

    (1)不能返回局部变量的引用。这条可以参照Effective C++[1]的Item 31。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了”无所指”的引用,程序会进入未知状态。

    (2)不能返回函数内部new分配的内存的引用。这条可以参照Effective C++[1]的Item 31。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak。

    (3)可以返回类成员的引用,但最好是const。这条原则可以参照Effective C++[1]的Item 30。主要原因是当对象的属性是与某种业务规则(business rule)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。

    (4)流操作符重载返回值申明为“引用”的作用:

    流操作符<<和>>,这两个操作符常常希望被连续使用,例如:cout << “hello” << endl; 因此这两个操作符的返回值应该是一个仍然支持这两个操作符的流引用。可选的其它方案包括:返回一个流对象和返回一个流对象指针。但是对于返回一个流对象,程序必须重新(拷贝)构造一个新的流对象,也就是说,连续的两个<<操作符实际上是针对不同对象的!这无法让人接受。对于返回一个流指针则不能连续使用<<操作符。因此,返回一个流对象引用是惟一选择。这个唯一选择很关键,它说明了引用的重要性以及无可替代性,也许这就是C++语言中引入引用这个概念的原因吧。赋值操作符=。这个操作符象流操作符一样,是可以连续使用的,例如:x = j = 10;或者(x=10)=100;赋值操作符的返回值必须是一个左值,以便可以被继续赋值。因此引用成了这个操作符的惟一返回值选择。

    例3

    #include

    展开全文
  • C语言函数返回值与参数传递

    千次阅读 2019-10-26 11:57:43
    C语言的函数中必不可少的就是参数传递,可以采用传值和传指针两种方式。 1.传值的形式:只是将参数值的拷贝传给函数,并非参数本体如: int test(int x,int y) { x=2*y; return x; } int main(void) { int a=0,b...

    C语言函数返回值与参数传递

    一:参数传递

    C语言的函数中必不可少的就是参数传递,可以采用传值和传指针两种方式。
    1.传值的形式:只是将参数值的拷贝传给函数,并非参数本体如:

    int test(int x,int y)
    {
        x=2*y;
        return x;
    }
    int main(void)
    { 
        int a=0,b=5;
        printf("%d,%d\n\r",test(a,b),a);
    	return 0;
    }
    

    运行结果为:
    10,0
    即传值方式只可以将实参传递给函数,不可以改变实参本身。

    2.传指针形式:直接传给函数的是变量的地址。
    如:

    int a(int b,int *c)
    {
        int i=0;
        for(i=0;i<4;i++)
            c[i]=b*i;
        return 0;
        
    }
    int main(void)
    { 
        int b=2,c[4],i;
        a(b,c);
        for(i=0;i<4;i++)
    	    printf("Data is -> %d\n\r",c[i]);
    	return 0;
    }
    

    运行结果为:
    Data is -> 0
    Data is -> 2
    Data is -> 4
    Data is -> 6

    由于被调函数在参数指针的作用域之内,此时可以直接改变变量的本体。

    二:返回值

    函数除了参数传递还有返回值,既可以返回变量值也可以返回地址。
    1.返回变量
    如:

    int a(int b)
    {
        int i=5;
        return 5*b;
    }
    int main(void)
    { 
        int b=2;
    	printf("Data is -> %d\n\r",a(b));
    	return 0;
    }
    

    运行结果

    Data is -> 10

    2.返回地址

    int *test(int b)
    {
        int i=0,buf[4];
        for(i=0;i<4;i++)
            buf[i]=b*i;
        return buf;
        
    }
    int main(void)
    { 
        int  b=2;
        int *p;
        int  i=0;
        p=test(b);
        for(i=0;i<4;i++)
        	printf("%d ,%d \n\r",p[i],test(b));
    	return 0;
    }
    

    运行结果
    0 ,1084896256
    2 ,1084896256
    4 ,1084896256
    6 ,1084896256

    另外不能返回局部变量地址。

    int *buf()
    {
    	 int dad;
    	 double buf[3][2];
    	 dad=sizeof(buf);
      	 return &dad;//error:由于dad是局部变量,函数结束后释放。
    }
    
    展开全文
  • JAVA参数传递方式 (按值传递与引用传递区别)

    千次阅读 多人点赞 2018-09-30 22:58:30
    令大家所费解的 当对象引用作为参数时 函数为什么能修改真实的对象呢?这不是引用传递的特征吗? 尤其先学习C++再学习JAVA的同学(比如说我自己)会这样认为, 用白话解释就是: 引用传递指针时, 连函数操作的指针都是...

    首先要明确的是JAVA中没有引用传递, 全部是按值调用

    令大家所费解的 当对象引用作为参数时  函数为什么能修改真实的对象呢?这不是引用传递的特征吗?

    尤其先学习C++再学习JAVA的同学(比如说我自己)会这样认为,

    用白话解释就是:

    引用传递指针时, 连函数操作的指针都是原来的指针,比如C++传入对象时直接用传入的指针操作

    而JAVA的引用传进函数时 , 会复制一个引用与实参指向同一对象的引用, 操作的不是同一个引用,

    如果还不明白区别再换种方式解释一次:

    JAVA只有按值调用, 参数是什么都会复制一份再操作, 就算是对象的引用也会复制一份新的引用,只不过指向的是同一个对象

    这种传参方式叫做按值传递, 传递的东西可以是引用(类似C++的指针)

    如果是引用传递像C++传入指针不会再复制一份了,直接拿来用

     

    如果再不明白也没关系,看看下面的例子和解释分析

    举个例子:

    输出结果:

    也就说我们用一个函数修改了 传入的一个int变量和一个对象内容,

    再输出int变量和对象内容时发现 ,int的没有改变,而 对象的内容改变了

     

    这说明什么呢,说明像 int ,double等基本数据类型在参数传递时并没有传进变量本身,

    而是创建了一个新的相同数值的变量, 函数修改这个新变量并没有影响原来变量的数值,这也是按值传递的特点

    那为什么对象a的数据就改变了呢?

    因为虽然也是按值传递, 复制了一份新的引用但是指向的对象是同一个,修改后会影响原对象

    这种方式假如在函数内修改 a=null; 只是把复制的引用与对象的联系断开,不影响函数外与实际对象

     

    这就是按值传递, 即使传的是引用也不是引用传递,

    因为引用传递是不复制的,直接使用参数,如下图:

    这时候函数把指针a=null就指针就置空了,函数外也无法再通过指针访问对象了

    这样可以理解了吗,自我觉得足够明白了, 我如此深厚的画图功底都供出来了,再不明白就是在为难我胖虎!

    水平有限, 可能有错误,敬请指出! 

    展开全文
  • 三种参数传递方式

    千次阅读 2018-10-09 20:39:49
    在函数定义和调用时,三种常见的参数传递方式: 1.传值 2.传指针 3.传引用 下面给出一个例子说明参数传递的三种方式 #include&lt;iostream&gt; using namespace std; void swap1(int a,int b) {...
  • C语言参数传递的三种方式

    千次阅读 2020-09-04 14:11:38
    C语言中函数参数传递的三种方式 (1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。 (2)传址,就是传变量的...
  • C++中函数调用时的三种参数传递方式详解

    万次阅读 多人点赞 2017-08-31 20:44:51
    原文地址:http://blog.csdn.net/cocohufei/article/details/6143476;  ...   在C++中,参数传递方式是“实虚结合”。 按值传递(pass by value) 地址传递(pass by pointer) 引用传递(pass b...
  • python函数的四种参数传递方式

    千次阅读 2018-11-09 16:29:56
    fun1(a,b,c) fun2(a=1,b=2,c=3) fun3(*args) fun4(**kargs) ...可以传入任意个参数,这些若干参数都被放到了tuple元组中赋值给行参args,参数的数量上没有了限制,次序。 最为灵活,其是以键值对...
  • 言归正传,都2020年了,居然还人认为java的参数传递方式是引用传递,今天我就来讲一讲java的参数传递,好好看,写的不对的地方,请大声说出来,反正我也不会改,憋坏了就不好了。 基本数据类型传递 我们先来看一...
  • java方法参数传递方式--按值传递、引用传递

    万次阅读 多人点赞 2017-12-25 21:33:28
    java的方法参数传递方式有两种,按值传递和引用传递 1.按值传递
  • 函数参数传递的两种方式——值传递和引用传递

    万次阅读 多人点赞 2018-10-23 15:50:05
    传递包括实实在在的值传递以及指针传递(指针传递参数本质上是值传递方式,它所传递的是一个地址值),传递的都是实参的一个拷贝。 1、实实在在的“值”传递 #include &lt;iostream&gt; #include &...
  • C++函数传递参数方式有哪几种?

    万次阅读 2017-09-04 22:58:51
    C++函数传递参数方式有以下四种: (1) 值传递  当进行值传递时,就是将实参的值复制到形参中,而形参和实参不是同一个存储单元,所以函数调用结束后,实参的值不会发生改变,程序示例如下: #include using ...
  • 函数参数的两种传递方式

    千次阅读 2020-03-27 19:02:11
    当调用函数时,两种向函数传递参数方式: 一、传值调用 该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。 默认情况下,C 语言使用传值调用方法来传递参数。...
  • c#的三种参数传递方式

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

    千次阅读 2018-10-22 20:06:15
    C语言中实际参数(实参)与形式参数(形参)之间的传递方式有传值和传地址两种函数调用方式。 1.直接传值。 直接传值,在fun函数里面改变a,b的值,不会改变主函数里面a,b的值。 #include&lt;stdio.h&gt;...
  • c语言三种参数传递方式

    万次阅读 2018-01-10 20:49:55
    传递,创建变量x和y,x的值等于a的值,y的值等于b的值 void Exchg1(int x, int y) { int tmp; tmp=x; x=y; y=tmp; printf(“x=%d,y=%d/n”,x,y) } void main() { int a=4,b=6; Exchg1 (a,b) ; printf(
  • 参数传递

    千次阅读 2018-12-01 07:30:18
    在Java中参数传递主要分为两种,一是值传递,二是引用传递。 一、首先我们要知道有哪些数据类型。  一种是基本数据类型。就是我们熟悉的 byte 、short、int、long、float、double、char、boolean 共八种。  另...
  • SpringBoot前后端分离参数传递方式总结

    千次阅读 多人点赞 2020-11-26 21:39:50
    因为总是需要使用不同的参数传递方式,所以特地来总结一下SpringBoot中常用的传递参数的方式。 SpringBoot参数传递 注意:虽然Restful风格很流行,但是大部分还是主要是GET和POST的内容,所以这里只是列举GET和POST...
  • 实现参数传递的几种方式

    千次阅读 2017-08-03 10:55:26
    由于web系统采用http协议在浏览器和... 表单传递参数是一种最简单,也是最基本的参数传递方式。注意:表单元素隐藏按钮的使用  方式二:带参数的url方式传递  带参数的url写法: url?参数名1=值1&参数名2=值2。
  • C语言中函数参数传递的三种方式

    千次阅读 2019-03-23 20:56:45
    C语言中函数参数传递的三种方式 (1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。 (2)传址,就是传变量的...
  • 上篇文章《c语言函数传参の结构体数组篇》提到了C语言的函数传参方式,百度了一一一大圈,说两种的,也说三种的,简直把我搞晕了,其中争议的地方就是“引用传递方式。我看好多写三种方式的都把源代码代码贴...
  • swift两种参数传递方式

    千次阅读 2018-11-14 22:36:45
    1.值传递传递的是参数的一个副本,这样在调用参数的过程中不会影响原始数据。 2.指针传递 指针传递参数本身引用(内存地址)传递过去,在调用的过程...让值传递以指针方式传递 时候我们需要通过一个函数改变...
  • 1)用寄存器(变量)传递参数, 在参数不多的时候采用这种方式(用的最多)。  附图实现的功能为串口发送ASCII码到上位机。,采用的就是寄存器传递参数方式。 2)用地址表传递参数  在主程序中建立一个地址表...
  • 函数的传值到底是值传递还是引用传递,要分情况: 不可变参数用值传递: 像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能...Python参数传递统一使用的是引用传递方式。因为Python...
  • VBA函数传递参数方式

    万次阅读 2018-03-04 20:58:03
    VBA函数传递参数值时分为...在VBA中,参数传递的默认方式是Byref,因为本质想法是对于相同命名的参数,在系统中采用同一个数值。 '获取非空行 Function GetNotNullRow(ByVal iStartRow, ByRef iRow) Dim Rng As Ran
  • 小程序参数传递的几种方式

    千次阅读 2020-06-09 18:47:08
    在微信小程序的开发中,我们会经常遇到页面间数据传递或者相互影响的问题。在实际的开发过程中,可以通过以下几种方法来实现。 方法一:使用全局变量 全局变量实际上是定义了一个全局的对象,并在每个页面中引入。...
  • 主程序调用子程序是,往往需要向子程序传递一些参数,同样,子程序运行的时候也需要把一些结果参数传回给主程序,主程序与子程序之间的这种信息传递称为参数传递,我们把主程序传给子存续的参数称为子程序的入口参数...
  • SpringMVC向页面传递参数的5种方式

    千次阅读 2018-05-08 12:44:21
    闲来无事,看到百度文库一个总结springmvc的传参的总结,看了后,感觉我也要记录一下第一种:使用HttpServletRequest和Session 然后setAttribute()public String index(HttpServletRequest request){ request....
  •  本章讲解SpringMVC的参数传递和其跳转方式 方法 1.概念 我们知道,SpringMVC用来简化控制层的编写,代替以前的servlet。但是我们前台的参数是怎样传递到控制层去使用呢?控制层怎样进行页面的跳转呢?就这些...
  • 在定义路由URL时,可以使用正则表达式提取参数的方法从URL中获取请求参数,Django会将提取的参数直接传递到视图的传入参数中。 未命名参数按定义顺序传递, 如 url(r'^weather/([a-z]+)/(\d{4})/$', views....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,214,391
精华内容 485,756
关键字:

参数传递方式有哪些