浅谈:C++函数

返回值

一般在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,直接被报错!!

这里就是指,不能直接改变其值。


回顾:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值