返回值
一般在C++中,可能初学者会写这么一个代码:
#include <iostream>
using namespace std;
int main(){
cout << "hello wrold" << endl;
return 0;
}
那int main()
这一句就是函数,也就是整个程序的主函数。
在C++程序中,有且只有一条主函数。
在main()
函数中,int
是代表什么呢?
int
是代表返回值。
从第一行hello wrold
代码中剖析:
int main(){
return 0;
}
此函数中,最后返回的值是0。
我们也可以创造一个子函数print()
, 将它的返回值写为float
再看看返回的是什么?
float print(){
return 1.2;
}
当在主函数中调用这个函数print()
的时候 , 会发生怎么样的结果?
#include <iostream>
using namespace std;
int main(){
cout << print() <<endl;
return 0;
}
最后显示的结果为:1.2。
在程序中,我们一般不会写这么简单的函数用来传入数据。
这个时候就会用到参数,用来传递数据的函数,例如:
int print(int);
然后将此函数调用在main()
函数中,会发生怎么样的结果?
int main(){
cout << print(10) <<endl;
}
它会直接报错,必须用反射来修改数据。——以后再说。
再来说说形参,
形参的定义为:
int print(int s){
return s*2;
}
然后我们传入一个数:
cout << print(2) <<endl;
最后输出的结果为:4。
也可以直接传入变量:
int value = 10;
cout << print(value) <<endl;
最后输出的结果是20。
当我们再将函数写得复杂一些,例如加上引用值:
void print(int &a);
当我们传入一个实参的时候,会得到什么?
cout << print(10) <<endl;
一大堆的错误,原因很简单,因为引用不能是任何数据类型值。
最简单的例子来理解引用:
int a = 10;
int &b = a;
其实引用就是一个
这样就成功将a的值,引用到b了。
但是,需要注意的是,引用不能为任何数据类型,下面会报错:
int &ab = 10;//error
当然这个函数不能写成这样:void print(int &s);
。
在;
号结束前,它就是一个函数,不会返回任何值。
但现在我们将它改写一下:
int print(int &s){
return s*=2;
}
再传入值int k =10
,那么它就会正确的显示返回。
既然能够用引用参数,那么何不为写成指针的样子?
int print(int *value){
return *value*2;//将value值,扩大两倍。
}
让人头疼的函数传递就来了:
int number =10;
cout << print(number) <<endl;
上面一句是错误的,因为没有绑定(bilnd)
。
那么我们现在回顾回顾指针的用法:
int value = 10;
int *point = &value;//这样就直接的被绑定到指针上面去了。
那么重新写一下这个函数,应该是这个样子的:
print(&number);
那能不能数组也传入参数里面去呢?
答案是可以的。
第一种写法是最为简单的:
void print(int arr[10]){
return arr[sizeof(a)];
}
用引用写的数组呢?
int print(int &arr[10]){
return arr[sizeof(arr)];
}
显然,这样是错误的,你必须这样写才对:
int print(int (&arr)[10]){
return arr[sizeof(arr)];
}
还有一个特别注意的一个地方:
引用数组参数时,必须得要和原数组的长度一致,指针也是一样。
这样就会报出错误:
void print(int (&arr)[]);
int arrfoo[2] = {1,2};
cout << print(arrfoo) <<endl;
//指针数组参数
void print(int *arr[]);
//erorr
注意:指针数组参数和指针参数完全不一样。
其实以上的所有int
数据类型,全部用void
数据类型来代替,也就不用写返回值(return ).
添加const
关键字,会发生什么?
在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值
void print(const int p){
p = 10;
}
显然这样是不行的,我们再来回顾一下const
的用法:
const int value_t = 10;
//改变一下:
value_t = 20;
//这里直接报错。
相同的,Static
关键字相同效果。
既然在参数中添加const
关键字,那么在参数列表后面添加呢?
很简单,不能直接改变其值,就因为const
。
用类来举例就简单很多。
class const_t{
int number;
public:
void foo()const{
cout << number++ <<endl;
}
}
const_t constMothd;
constMothd.foo();//error,直接被报错!!
这里就是指,不能直接改变其值。
回顾: