zoukankan      html  css  js  c++  java
  • C++中关于函数的引用

      这一块知识最常见的疑问就是:

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    int a[50];
    int& fun(int& x)
    {
    	return x;
    }
    int main()
    {
    	int n;
    	while(cin>>n)
    	{
    		int i;
    		int tmp;
    		for(i = 1;i <= n;i++) {
    			cin>>tmp;
    			/*normal assignment way*/
    			//a[i] = tmp;
    			fun(a[i]) = tmp;
    		}
    		for(i = 1;i <= n-1;i++)
    			cout<<a[i]*2<<' ';
    		cout<<a[i]*2<<endl;
    	}
    	return 0;
    }
    

     形如这样的程序,在进行赋值操作的时候,为啥fun函数的返回值可以接受一个赋值呢?

    要搞明白这个问题,我们不妨先来考虑另一个问题,来看code:

    #include <stdio.h>  
    char *RetMemory()  
    {  
        char p[]="hello world
    ";  
        return p;  
    }  
    int main( )  
    {  
        char *str=NULL;  
        str=RetMemory();  
        printf(str);  
       return 0;
    }

     str并不能够顺利输出“hello world ”,因为那是在fun函数中的一个临时变量,在fun函数的调用结束后他的空间就自动被销毁了,这就引出了我们的问题,怎样才能将函数内的变量返回回去?其实很简单,我们只要在一开始接受参数的时候用引用即可,即我们的形参是引用,然后返回的值也是引用,这样直观的来看我们会发现函数就像一个管道,起到了传输变量的作用

    因此我们就不难理解为什么对左右移运算符的重载函数的返回类型和第一个参数的类型都要设置成引用:

    ostream & operate <<(ostream &output, Complex &c)//定义流提取运算符“<<”重载函数  
    {  
           output<<”(”<<c.real<<”+”<<c.imag<<”i)”<<endl;  
           return output;  
    }  
    
  • 相关阅读:
    C语言超大数据相加计算整理
    pc端页面加载更多条信息(loading)
    web前端学习路线
    linux启动流程
    Computer Science: http://www.cs.odu.edu/~cs779/
    编程网站
    sublime-text 键绑定
    monokai-background
    .vimrc
    vim 正则表达式查找ip
  • 原文地址:https://www.cnblogs.com/immortal-worm/p/5280556.html
Copyright © 2011-2022 走看看