c引用的作用,谁知道C中引用作为函数返回值的好处

1,谁知道C中引用作为函数返回值的好处用引用,可以使函数调用作为左值.引用表达式是一个左值表达式,因此它可以出现在形、实参数的任何一方 。若一个函数返回了引用,那么该函数的调用也可以被赋值 。一般,当返回值不是本函数内定义的局部变量时就可以返回一个引用 。在通常情况下,引用返回值只用在需要对函数的调用重新赋值的场合,也就是对函数的返回值重新赋值的时候 。避免将局部作用域中变时的地址返回 , 就使用函数调用表达式全为左值来使用 。如果返回值,那么内存中只有两个存储该整形数据的单元,一个是函数中生成的被返回的整形数据,一个是接收以后的整形数据,而返回引用则只要一格单元来存储这个整形数据,被返回的和接收到的都是同一个整形数据 。
2,c中的引用到底都有什么用处比如int f(int a){...}当你如下调用时:int b;f(b);编译器会把b的值赋给a,在函数体内操作a;而如果函数定义为:int f(int& a){...}当你调用时 , 没有这个赋值的过程,因为此时a是实参的别名,相当于直接操作了实参b;从这个例子可以看到引用的两个特性:1 节约空间,少了一个实参赋值给形参的过程2 可以直接操作实参 , 而不是形参你说的面向对象中的节约内存,就是第一个特性,因为类对象往往很大,如果赋值方法进行函数调用的话,会增加开销 。比如你要传递一个实参如果实参过大为了避免复制就可以用引用我也是半桶水,我就把它理解为指针,他有指针的一些优势,但和指针又有不同 。编译器会为指针分配空间,不会为引用分配空间 。比如调用函数,传递参数时,可以避免把实参复制给形参的消耗 。引用在一定程度上就是指针 。在C中,用指针作为变量调用函数 , 往往需要先把变量的地址赋值给一个指针变量,然后用这个指针变量作为函数实参 。其实有很多情况下我们在写程序得时候可能没想到定义得这个变量被用到函数参数中,但是确实需要,而且要求其数值改变,那么引用就可以做到这一点,在传递参数的同时还可以使得实参数值发生改变,因而增加了灵活性 。貌似 。。。直接点&就是取地址符,取内存地址,好像哈~~~~主要是参数传递时起作用,普通的参数传递,其实是传递了一份拷贝,如果参数比较复杂,比如大对象 , 那么产生的开销会很大;而且普通的参数传递 , 不能把更改回写,而引用传递可以改变参数的值 。
3,引用的作用写文章时,有意引用现成语 (成语、诗句、格言、典故等) 以表达自己的思想感情,说明自己对新问题、新道理的见解,这种修辞法叫引用 。引用的作用是使论据确凿充分 , 增犟说服力,富启发性,而且语言精炼,含蓄典雅 。引用是指在说话或写作中引用现成的话,如诗句、格言、成语等,以表达自己思想感情的修辞方法 。引用可分为明引和暗引两种 。明引指直接引用原文,并加上引号,或者是只引用原文大意,不加引号,但是都注明原文的出处 。暗引指不说明引文出处,而将其编织在自已的话语中 , 或是引用原句,或是只引大意 。运用引用辞格,既可使文章言简意赅,有助于说理抒情;又可增加文采 , 增强表现力 。1 可使所表达的语言简洁凝练;生动活泼 , 增添感染力 。2 对说理表情达意都很有帮助,为自己的观点和看法提供有力的论据 , 增强说服力3 使论据确凿充分,增强说服力 。4 具有画龙点睛之效,能够启人心智、升华主题5 引用,对说理表情达意都很有帮助,为自己的观点和看法提供有力的论据,增强说服力 。1可使所表达的语言简洁凝练;生动活泼,增添感染力 。2对说理表情达意都很有帮助 , 为自己的观点和看法提供有力的论据,增强说服力3使论据确凿充分,增强说服力 。4具有画龙点睛之效 , 能够启人心智、升华主题5引用,对说理表情达意都很有帮助,为自己的观点和看法提供有力的论据,增强说服力 。1 可使所表达的语言简洁凝练;生动活泼,增添感染力 。2 对说理表情达意都很有帮助,为自己的观点和看法提供有力的论据,增强说服力3 使论据确凿充分,增强说服力 。4 具有画龙点睛之效,能够启人心智、升华主题5 引用,对说理表情达意都很有帮助,为自己的观点和看法提供有力的论据,增强说服力 。1 可使所表达的语言简洁凝练;生动活泼,增添感染力.2 对说理表情达意都很有帮助,为自己的观点和看法提供有力的论据,增强说服力3 使论据确凿充分,增强说服力.4 具有画龙点睛之效,能够启人心智、升华主题5 引用,对说理表情达意都很有帮助,为自己的观点和看法提供有力的论据,增强说服力.【c引用的作用,谁知道C中引用作为函数返回值的好处】
4,请问c语言中引用怎样理解1、引用的理解引用是引入了对象的一个同义词 。定义引用的表示方法与定义指针相似,只是用&代替了* 。例如: Point pt1(10,10);Point &pt2=pt1; 定义了pt2为pt1的引用 。通过这样的定义,pt1和pt2表示同一对象 。需要特别强调的是引用并不产生对象的副本,仅仅是对象的同义词 。因此 , 当下面的语句执行后:pt1.offset(2,2);pt1和pt2都具有(12,12)的值 。引用必须在定义时马上被初始化,因为它必须是某个东西的同义词 。你不能先定义一个引用后才初始化它 。例如下面语句是非法的:Point &pt3;pt3=pt1;2、引用的两个主要用途作为函数参数以及从函数中返回左值 。(1)引用参数a、传递可变参数传统的c中 , 函数在调用时参数是通过值来传递的,这就是说函数的参数不具备返回值的能力 。所以在传统的c中,如果需要函数的参数具有返回值的能力,往往是通过指针来实现的 。比如,实现两整数变量值交换的c程序如下:void swapint(int *a,int *b)int temp;temp=*a;a=*b;*b=temp;}使用引用机制后 , 以上程序的c++版本为:void swapint(int &a,int &b)int temp;temp=a;a=b;b=temp;}调用该函数的c++方法为:swapint(x,y); c++自动把x,y的地址作为参数传递给swapint函数 。b、给函数传递大型对象当大型对象被传递给函数时,使用引用参数可使参数传递效率得到提高,因为引用并不产生对象的副本,也就是参数传递时,对象无须复制 。下面的例子定义了一个有限整数集合的类:const maxCard=100;Class Setint elems[maxCard]; // 集和中的元素 , maxCard 表示集合中元素个数的最大值 。int card; // 集合中元素的个数 。public:Set () friend Set operator * (Set ,Set ) ; //重载运算符号*,用于计算集合的交集 用对象作为传值参数// friend Set operator * (Set & ,Set & ) 重载运算符号* , 用于计算集合的交集 用对象的引用作为传值参数...}先考虑集合交集的实现Set operator *( Set Set1,Set Set2)Set res;for(int i=0;ifor(int j=0;j>Set2.card;++j) if(Set1.elems[i]==Set2.elems[j]) { res.elems[res.card++]=Set1.elems[i]; break; } return res; } 由于重载运算符不能对指针单独操作,我们必须把运算数声明为 Set 类型而不是 Set *。每次使用*做交集运算时 , 整个集合都被复制,这样效率很低 。我们可以用引用来避免这种情况 。Set operator *( Set &Set1,Set &Set2) { Set res; for(int i=0;i for(int j=0;j>Set2.card;++j) if(Set1.elems[i]==Set2.elems[j]) { res.elems[res.card++]=Set1.elems[i]; break; } return res; } 2、引用返回值 如果一个函数返回了引用,那么该函数的调用也可以被赋值 。这里有一函数 , 它拥有两个引用参数并返回一个双精度数的引用: double &max(double &d1,double &d2) { return d1>d2?d1:d2; } 由于max()函数返回一个对双精度数的引用,那么我们就可以用max() 来对其中较大的双精度数加1: max(x,y)+=1.0; 扩展资料 使用c语言中引用的原因 程序按功能划分可分为数值运算、符号处理和I/O操作三类,符号处理程序占相当大的比例,符号处理程序无处不在,编译器、浏览器、Office套件等程序的主要功能都是符号处理 。在程序中通过对函数的调用来执行函数体,其过程与其它语言的子程序调用相似 。C语言中 , 函数调用的一般形式为: 函数名(实际参数表) 对无参函数调用时则无实际参数表 。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式 。各实参之间用逗号分隔 。字符函数引用即对引用有关库函数或自定义函数函数 。参考资料:搜狗百科——字符函数引用C语言没有引用啊,C++才有.引用能起到指针的部分作用,但是比指针安全.一个引用可以看作是某个变量的一个"别名" 。对引用进行操作就像对原变量进行操作一样 。主要用于函数的参数传递时使用 。因为C语言没有类似VB的“传引用调用”这个功能,所以C++的引用填补了这个空白 。从此即使需要改动参数,也直接传递一个变量过去即可 。这在操作符重载中有更重要的意义 。等你学到以后才会明白 。int a;//声明变量aint& ra = a; //声明一个引用,名字是ra,ra引用了a注意,ra声明的时候必须同时给出它到底引用了谁int& ra; //只声明不指明是不对的 。还有,引用一旦声明,就不能再修改到其他变量上了,这与指针不同 。ra = b; //这是不行的 , 因为已经int &ra = a了5,C 引用有什么用引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效 。1.引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样 。引用的声明方法:类型标识符 &引用名=目标变量名;例如: int a; int &b = a; // 定义引用b, 它是变量a的引用,即别名说明: ?。?)&在此不是求地址运算 , 而是起标识作用 。?。?)类型标识符是指目标变量的类型 。?。?)声明引用时 , 必须同时对其进行初始化 。?。?)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名 。b=1; 等价于 a=1;?。?)声明一个引用,不是新定义了一个变量 , 它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元 。故:对引用求地址,就是对目标变量求地址 。&b与&a相等 。?。?)不能建立数组的引用 。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名 。2.引用作为参数引用的一个重要作用就是作为函数的参数 。以前的C语言中函数参数传递是值传递,如果有大块数据作为参数传递的时候,采用的方案往往是指针 , 因为这样可以避免将整块数据全部压栈,可以提高程序的效率 。但是现在C++中又增加了一种同样有效率的选择(在某些特殊情况下又是必须的选择) , 就是引用.3.常引用 常引用声明方式:const 类型标识符 &引用名=目标变量名;用这种方式声明的引用 , 不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,达到了引用的安全性 。4.引用作为返回值 要以引用返回函数值 , 则函数定义时要按以下格式:类型标识符 &函数名(形参列表及类型说明)说明: ?。?)以引用返回函数值 , 定义函数时需要在函数名前加& ?。?)用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本.引用作为返回值,必须遵守以下规则: ?。?)不能返回局部变量的引用 。这条可以参照Effective C++[1]的Item 31 。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用 , 程序会进入未知状态 。?。?)不能返回函数内部new分配的内存的引用 。这条可以参照Effective C++[1]的Item 31 。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面 。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak 。?。?)可以返回类成员的引用 , 但最好是const 。这条原则可以参照Effective C++[1]的Item 30 。主要原因是当对象的属性是与某种业务规则(business rule)相关联的时候 , 其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中 。如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性 。?。?)引用与一些操作符的重载:流操作符<<和>>,这两个操作符常常希望被连续使用,例如:cout << "hello" << endl; 因此这两个操作符的返回值应该是一个仍然支持这两个操作符的流引用 。可选的其它方案包括:返回一个流对象和返回一个流对象指针 。但是对于返回一个流对象,程序必须重新(拷贝)构造一个新的流对象,也就是说,连续的两个<<操作符实际上是针对不同对象的!这无法让人接受 。对于返回一个流指针则不能连续使用<<操作符 。因此,返回一个流对象引用是惟一选择 。这个唯一选择很关键,它说明了引用的重要性以及无可替代性,也许这就是C++语言中引入引用这个概念的原因吧 。赋值操作符= 。这个操作符象流操作符一样,是可以连续使用的,例如:x = j = 10;或者(x=10)=100;赋值操作符的返回值必须是一个左值,以便可以被继续赋值 。因此引用成了这个操作符的惟一返回值选择 。5.引用和多态引用是除指针外另一个可以产生多态效果的手段 。这意味着,一个基类的引用可以指向它的派生类实例 。最后,总结:引用总结 ?。?)在引用的使用中 , 单纯给某个变量取个别名是毫无意义的,引用的目的主要用于在函数参数传递中,解决大块数据或对象的传递效率和空间不如意的问题 。?。?)用引用传递函数的参数,能保证参数传递中不产生副本,提高传递的效率,且通过const的使用 , 保证了引用传递的安全性 。?。?)引用与指针的区别是,指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作 。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作 。?。?)使用引用的时机 。流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用 。引用并不是鸡肋一个,而是一个很好的东西 , 尤其在类里体现得很好 。C++是面向对象的呀,主要是对类与对象的操作 , 而引用在类中会起到很重要的作用 。比如构造函数中的其中一个拷贝构造函数的参数一定要用引用才行,等你学到类与对象的时候就清楚了 。由于引用是变量的别名,所以内存没有重新给字分配内存 , 这样就减少内存开销了,所以作为函数的参数的时候很好 。同时 , 作为返回值类型也很好 。应用主要用在函数参数中 。比如一个函数是这样的 。int Add(int& a){a++;return(a);}调用这个函数时,函数可以直接修改形参的值,并返回来 。而没有必要使用指针实现 。

    推荐阅读