精华内容
下载资源
问答
  • 1.值传递:有一个形参向函数所属的栈拷贝数据的过程,如果值传递的对象是类对象或是大的结构体对象,将耗费一定的时间和...效率上讲,指针传递和引用传递比值传递效率高。一般主张使用引用传递,代码逻辑上更加紧...

    值传递:

    void fun(int x){
    
    x += 5; //修改的只是y在栈中copy x,x只是y的一个副本,在内存中重新开辟的一块临时空间把y的值 送给了x;这样也增加了程序运行的时间,降低了程序的效率。
    
    }
    
    void main(void){
    
    int y = 0;
    
    fun(y);
    
    cout<<\"y = \"<<y<<endl; //y = 0;
    
    }
    

    指针传递:

    void fun(int *x){
    
    *x += 5; //修改的是指针x指向的内存单元值
    
    }
    
    void main(void){
    
    int y = 0;
    
    fun(&y);
    
    cout<<<<\"y = \"<<y<<endl; //y = 5;
    
    }
    

    引用传递:

    void fun(int &x){
    
    x += 5; //修改的是x引用的对象值 &x = y;
    
    }
    
    void main(void){
    
    int y = 0;
    
    fun(y);
    
    cout<<<<\"y = \"<<y<<endl; //y = 5;
    
    }
    
    1.值传递:有一个形参向函数所属的栈拷贝数据的过程,如果值传递的对象是类对象或是大的结构体对象,将耗费一定的时间和空间。
    2.指针传递:同样有一个形参向函数所属的栈拷贝数据的过程,但拷贝的数据是一个固定为4字节的地址。
    3.引用传递:同样有上述的数据拷贝过程,但其是针对地址的,相当于为该数据所在的地址起了一个别名。

    效率上讲,指针传递和引用传递比值传递效率高。一般主张使用引用传递,代码逻辑上更加紧凑、清晰。

    引用传递做函数参数”是C++的特性,C语言不支持。

    展开全文
  • 引用传递的方式则回避了所有构造析构动作。 当采用值传递的方法时,可能会造成切割问题。 如将子类对象值传递到基类类型中去,子类特有的部分将被切割掉。 引用传递,真正传递的是指针。 当对内置类型的...
    • 对于一般的类对象而言,值传递方式会调用多次构造函数和析构函数。
      引用传递的方式则回避了所有构造和析构动作。

    • 当采用值传递的方法时,可能会造成切割问题

      • 如将子类对象值传递到基类类型中去,子类特有的部分将被切割掉。
    • 引用传递,真正传递的是指针

      • 当对内置类型的值进行引用传递,其相对于值传递多了一次寻址操作,最终还要通过指针(引用传递过来的)访问内存中的值。
      • 如果在函数中多次用到这个内置类型变量,可能就多次访问寄存器(按值传递),或者多次访问内存(按引用传递)。在这种情况下按值传递更优?因为这种情况下按值传递只需要访问一次内存。
    • Reference:
      C++吧
      Blog

    展开全文
  • C++函数的三种传递方式为:值传递、指针传递和引用传递值传递:void fun(int x){ x += 5; //修改的只是y在栈中copy x,x只是y的一个副本,在内存中重新开辟的一块临时空间把y的值 送给了x;这样也增加了程序运行的...
    (1)指针传递与引用传递的区别:

    指针参数传递本质上是值传递,它所传递的是一个地址值。值传递过程中,被调函数的形参作为被调函数的局部变量处理,会在栈中开辟内存空间以存放由主调函数传递进来的实参值,从而形成了实参的一个副本(替身)。值传递的特点是,被调函数对形参的任何操作都是作为局部变量进行的,不会影响主调函数的实参变量的值(形参指针变了,实参指针不会变)。

    引用参数传递过程中,被调函数的形参也作为局部变量在栈中开辟了内存空间,但此时存放的是由主调函数放进来的实参变量的地址。被调函数对形参(本体)的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量(根据别名找到主调函数中的本体)。因此特点被调函数对形参的任何操作都会影响主调函数中的实参变量

    【注:】指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变

    (2)在C++中,函数的形参,什么时候使用引用?什么时候使用指针?什么时候使用按值传递?

    1  针对函数内部只使用传递的值而不做修改
    (1)数据对象较小,如内置数据类型或小型结构体,则按值传递
      void func(int );
    (2)数据对象是数组,则只能使用指针,并将指针const指针
      void func(const int *,int);//第二个参数为数组长度
    (3)数据对象是较大的结构体,则const指针或const引用都行
      struct struc{…};
      void func(const struc *);
      或void func(const struc &);
    (4)数据对象是类,则使用const引用
      void func(const string &,);
    2  针对函数内部不仅使用传递的值且要做修改的
    (1)数据对象是内置数据类型,则使用指针
      void func(int *);
    (2)数据对象是数组,则只能使用指针
      void func(int *,int);//第二个参数为数组长度
    (3)数据对象是结构体,则使用引用或指针
      struct struc{…};
      void func(struc *);
      或void func(struc &);
    (3)数据对象是类,则使用引用
      void func(ostream &);


    1.值传递:

    void fun(int x)
    {
       x += 5; //修改的只是y在栈中copy x,x只是y的一个副本,在内存中重新开辟的一块临时空间把y的值 送给了x;这样也增加程序运行时间,降低了程序的效率
    }
    
    
    
    void main(void)
    {
        int y = 0;
        fun(y);
        cout<<\"y = \"<<y<<endl; //y = 0;
    }

    2.指针传递:

    void fun(int *x)
    {
       *x += 5; //修改的是指针x指向的内存单元值
    }
    
    void main(void)
    {
        int y = 0;
        fun(&y);
        cout<<<<\"y = \"<<y<<endl; //y = 5;
    }

    3.引用传递:引用传递做函数参数”是C++的特性,C语言不支持”

    void fun(int &x)
    {
        x += 5; //修改的是x引用的对象值 &x = y;
    }
    
    
    
    void main(void)
    {
        int y = 0;  //引用的实参必须初始化
        fun(y);
        cout<<<<\"y = \"<<y<<endl;   //y = 5;
    }

    例如:数据结构带&与不带&

    带&的是引用型参数,它是地址传递,其实参会随着形参的改变而改变;

    不带&的参数是一般参数,是值传递,其实参不会随着形参的改变而改变。


    展开全文
  • 如果数据对象是一个比较大的struct,则应该使用const指针或者const引用,来防止参数传递时发生结构体的复制,导致程序效率下降; 如果数据对象时类对象,则使用const引用; 如果函数传参的目的包括了修改传入的...

    如果函数传参的目的仅仅是传参而不是修改参数的值:

    如果数据对象很小,比如是内置数据类型,或小型的struct,则使用值传递;

    如果数据对象是数组,则只能使用指针,并且将指针声明为指向const的指针(const int*、int const*),保证指针所指向内容不会被修改;

    如果数据对象是一个比较大的struct,则应该使用const指针或者const引用,来防止参数传递时发生结构体的复制,导致程序效率下降;

    如果数据对象时类对象,则使用const引用;

    如果函数传参的目的包括了修改传入的参数的值:

    如果数据对象是c++内置数据类型,则使用指针,这将增加代码的可读性(&x);

    如果对象是数组,则只能使用非const的指针;

    如果数据对象是struct,则可以使用指针或引用;

    如果数据对象是class,则使用引用。

    展开全文
  • 指针引用和传递

    2019-11-04 11:17:26
    对于那些函数,它们只使用传递过来的值,而不对值进行修改。 (1)如果数据对象很小,如内置数据类型或小型结构,使用按值传递。 (2)如果数据对象是数组,则...因此,传递类对象参数的标准方式是按引用传递。 ...
  • 引用和指针参数使用的原因 1.调用函数时要修改传入的参数 2.传入的数据对象太大时通过传递引用可以提高程序运行的效率 ...引用传递 传递类对象 指针传递 传递数组对象 引用和指针都可以 数据对象是较大的结构 ...
  • 1.值传递 传递给函数的是值得副本,引用传递,传递得是地址得副本。地址值copy,数据量小。值copy,数据量大,效率低。 2.值类型引用类型 值类型:基本数据类型 ,数组,结构体 引用类型:指针,切片,map,...
  • 2)对于传递大型参数:如果参数较大,则通过引用(或指针传递效率更高,因为仅实际传递地址,而不传递整个对象。例如,让我们考虑以下Employee类一个用于打印Employee详细信息的函数printEmpDetails()。 ...
  • 指针和引用

    2019-10-08 15:58:35
    指针和引用 ...引用和指针的区别:相同点都是地址的概念,指针指向一块内存,内容就是指向内存的地址,而引用就是一块内存的地址。不同点1.引用仅是一个别名(不需要分配内存),而指针是一个实体...
  • 传递对象和引用

    2018-11-17 11:54:04
    值传递:有一个形参向函数所属的栈拷贝数据的过程,如果值传递的对象是类对象或是大的结构体对象,将耗费一定的时间...效率上讲,指针传递和引用传递比值传递效率高。一般主张使用引用传递,代码逻辑上更加紧凑、清...
  • C++引用和指针

    2015-01-05 10:08:52
    使用引用的两个原因:1、程序员可以修改调用函数中的数据对象。2、通过传递引用而不传递整个数据对象,可以...如果数据对象是较大的结构,则使用const指针或者const引用,以提高程序效率。这样可以节省复制结构所需...
  • 在给函数传递参数时指针和引用有以下几个作用: (1)用指针和引用可以使函数返回多个值 在C++语言中,函数只能返回一个值,要想返回多值就要用指针引用给函数传递参数。尤其是在传递比较大的对象时,使用指针或...
  • C++中引用和指针

    2020-02-04 17:28:00
    比如:值传递不如地址传递高效, 因为值传递先从实参的地址中取出值,再赋值给形参代入函数计算;而指 针则把形参的地址直接指向实参地址,使用时直接取出数据,效率提高,特别在频繁赋值等情况下...
  •  正确选择参数是通过值、通过引用还是通过指针传递,是一种能够最大程度提高安全性和效率的好习惯。  选择如何传递参数时,应该遵循一下准则。对于只输入参数:  1.始终用const限制所有指向只输入参数的指针...
  • 通常来讲,除非是迫不得已,否则最好不要采用传值的方式传递和返回对象,这是因为采用传值的方式传递和返回对象的过程中需要经历对象间的拷贝操作,这样会在一定程度上降低程序运行的效率,从而使得待处理数据量增大...
  • 信号与槽引用传递

    2018-08-27 16:06:00
    信号与槽是可以引用传递的,根据我的直觉,应该函数的引用传递差不多,效率比值传递高。 看了很多别人的例子或者教学视频,信号与槽都是简单的值传递,但是看了Qt的手册,里面几乎都是引用或者指针传递参数。 ...
  • 值传递、引用传递

    2020-01-08 22:54:40
    【想替代char[] char*,java底层封装了字符串,但半对象半基础类型,c++的字符串类型一样都是半成品,所以只能死记为传值,效率、使用传值逻辑统一性都很不舒服】 对象传地址 【与c++ ...
  • 指针和引用的区别

    2020-11-03 19:03:27
    思维导图 1. 使用指针的原因 1.1 每一个编程语言都使用指针 C++将指针暴露给了 用户(程序员),而java...而指针则把形参的地址直接指向实参地址,使用时直接取出数据,效率提高。(这里形参的改变会影响实参的值)
  • 下面是一些指导原则: 对于使用传递的值而不作...3.如果数据对象是较大的结构,则使用const指针或const引用,以提高程序的效率。这样可以节省复制结构所需的时间空间。 4.如果数据对象是类对象,则使用const引用
  • &在C/C++中做右值时,为取地址运算符,来指示变量的地址。...和指针作为函数参数一样,可以提高函数的效率,函数参数在按值传递的情况下,会产生一个临时的副本。 //引用: void func(i...
  • 待议:指针和引用实际都占用内存,引用内部是用常指针实现的,因此占用空间和指针大小一样。但是 &引用 返回绑定对象的地址。 区别 定义指针可以不初始化,定义引用必须要初始化。 指针可以为空,引用不能为空...
  • C++对象和指针引用

    2012-04-26 23:34:36
    对象指针和对象引用作函数的参数 1. 对象指针作函数的参数 使用对象指针作为函数参数要经使用对象作函数参数更普遍一些。因为使用对象指针作函数参数有如下两点好处: (1) 实现传址调用。可在被调用函数中改变...
  • 指针和引用参数区别

    2010-12-08 00:18:05
    1.两者都可以不用复制变元而提高效率,但是指针传递实际上是复制了指针的,而引用没有复制。 2.虽然两者都可以改变变元的值。但是如果函数参数是指针那就是明显暗示传入的值可能被改变,而传引用没有这个暗示。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 421
精华内容 168
关键字:

引用传递和指针传递效率