
楼上几位说的基本详细了,就是返回引用的意思,指返回值是一个引用。你老师说错了。
所谓返回引用是指返回一个已存在对象的引用,(切记一定要是已经存在的)
所谓引用其实就是包装指针的一个语法糖,
所谓语法糖就是说使用引用的地方用指针也可以实现,只不过要写更多的代码。
教科书上对引用这种数据类型讲得很简单,用它给变量起“别名”的作用甚至让人觉得它是多余的!
其实它真正的用武之地是在参数传递中!
众所周知在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、最后,完成上述步骤后,保存文件,保存时文件名和功能名保持不变,如下图所示。这样,问题就解决了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)