返回引用的函数

返回引用的函数,第1张

楼上几位说的基本详细了,就是返回引用的意思,指返回值是一个引用。你老师说错了。

所谓返回引用是指返回一个已存在对象的引用,(切记一定要是已经存在的)

所谓引用其实就是包装指针的一个语法糖,

所谓语法糖就是说使用引用的地方用指针也可以实现,只不过要写更多的代码。

教科书上对引用这种数据类型讲得很简单,用它给变量起“别名”的作用甚至让人觉得它是多余的!

其实它真正的用武之地是在参数传递中!

众所周知在C语言中不论是从实参到形参,还是从局部变量到返回值,都是清一色的值传递。

值传递意味着全拷贝,不仅效率低下,更多的时候它也并非是你想要的语义。

试想你要去月球,现在从你身上取一个细胞克隆出一个与你同样的人,让它去完成你的探月计划,

然后回来给你讲它的所感所受,或许你能听得身临其境,并且它的成功证明换成你也行,但这是你想要的吗?

T fun(T t){return t;} void main() {T t; t=fun(t);}

在上面的代码中你能发现几个变量

1主函数main()中定义了局部变量t

2调用fun()函数时,自动产生一个局部变量(也就是形参表中的变量t)用于接受实参的值

3函数fun()返回它自己的形参变量t时,又自动了产生一个匿名临时变量用于存放返回值

T& fun(T& t){return t;} void main() {T t; t=fun(t);}

与上面的代码相比较,不存在第2个和第3个变量。

使用引用常见有以下几种情形:(很不全面,抛砖引玉)

情形一:返回函数实参 T& fun(T& t){return t;}

情形二:返回静态变量 T& fun(){static T t; return t;}

情形三:返回当前对象 T& T::fun(){return this;}

情形四:返回新建对象 T& fun(){return new T;}

注意与最后一种情形类似但不等价的指针形式如下:

T& fun(){T pt=new T(); return pt;} //除非显式调用delete,否则对象(pt)不会被释放!

不是必须有返回值。如果没有返回值类型名为"void"。

void函数的定义:

void+函数名()//无类型+函数名

{// 程序代码

}

如果没有返回值类型名为"void", 整数类型int 类型返回值为整数类型int,以此类推……

类型名有:void int long float int long float ……

扩展资料:

需要说明的是:

1、一个C语言源程序可以由一个或多个源文件组成。 

2、每个源文件可由一个或多个函数组成。

3、一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。是整个程序的入口。 

4、源程序中可以有预处理命令(包括include 命令,ifdef、ifndef命令、define命令),预处理命令通常应放在源文件或源程序的最前面。

5、每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。(结构体、联合体、枚举型的声明的“}”后要加“ ;”。)

6、标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。

参考资料:

-函数

return 可以分两种情况:

1有返回值的函数

int function1(){

return  1;    --必须要return 才能有返回值。

};

2没有返回值的函数

void function2(){

return;    --写了return会直接跳出函数,不会继续执行下面的语句。

int a=1+1;  

};

扩展资料:

被调用函数是void类型表达式最后一句写return是没有意义的,如果在表达式的最上面写return就会直接跳出函数不会执行下面的语句,。

2被调用函数不是void类型,你肯定需要函数的返回值,比如你写一个你调用比大小的函数你肯定需要知道谁大谁小,记住函数一旦遇到 return 语句就立即返回,后面的所有语句都不会被执行到了。

参考资料

-return(C语言语句)

重载是指函数签名不同,函数签名包括:函数名、参数类型及参数的顺序,唯独不包括返回类型,所以如果仅返回类型不一样,那么两个签名相同的函数就会被C++标准认为是同一个函数,编译时就会报错,函数不能决议。

我给你从编译器角度考虑下吧!

1、首先局部变量的使用范围只有在这个局部范围类有效。

2、函数是模块化的思想。比如你有一个判断一个数是否是素数的函数。那么你再求100以内所有素数和的时候,main中会调用这个函数100次。这些函数编译器在处理的时候都是放在一个堆栈的。而且每个函数都占有不同的地址和空间。(递归函数尤为明显)。最关键的是,当函数返回函数值后,函数的使命就结束了。所以这个函数体在呢内存中就销毁了。你即使能从函数中返回一个局部变量。你再去读这个地址的时候。东西都不在了。

3、还有一点。编译器在分配函数的空间的时候,地址不是固定的。所以你每次运行程序,你会发现 int a=3 printf(f"%d",&a),不都是一样的。所以你的问题很明了了。

用法上出现错误导致的报错。解决方法和 *** 作步骤如下:

1、首选,打开编译器,然后在命令行中键入edit打开,如下图所示。

2、其次,完成上述步骤后,输入Function以表明该文件是功能文件,如下图所示。

3、接着,如果在等号的左侧输入了任何返回值,请使用方括号表示多个返回值,如下图所示。

4、然后,等号的右边是函数名称加括号,括号是参数,如下图所示。

5、随后,完成上述步骤后,使用%注释,注释的第一行是解释函数的功能,如下图所示。

6、接着,完成上述步骤后,传递两个点的坐标,然后计算两个点之间的距离,并传给返回值y,如下图所示。

7、最后,完成上述步骤后,保存文件,保存时文件名和功能名保持不变,如下图所示。这样,问题就解决了。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/13494654.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存