c++学习笔记之函数

来源:互联网 发布:dz论坛seo怎么设置 编辑:程序博客网 时间:2024/05/19 05:29

传值参数和引用参数:

传值参数不改变实参的值。

指针形参也是传值参数

int n = 0,i = 42;

int *p = &n,*q = &i;

*p =42; 这一句改变的是n的值,n变成了42,指针p的值不变

p = q;这一句指针p指向的对象变成了i,n和i的值保持不变

引用形参相当于给实参起了另外一个名字,在函数中做的操作会改变实参的值

当函数不需要改变引用形参的值时最好使用常量引用,可以避免对象的拷贝。

因为数组不可以拷贝并且使用数组的时候实际上使用的是数组的指针,所以当给函数传递一个数组时,实际上时传递指向数组首元素的指针。

传递数组的时候需要注意数组越界问题,当把数组作为函数的形参时有三种方式,将数组声明为指针,声明为不限维度的数组,声明为维度确定的数组。

不知道实参的个数,但是实参的类型全部相同,可以使用initializer_list的类型来声明形参。

调用一个返回类型为引用的函数返回左值,其他类型返回的是右值。

允许main函数不写return语句,mian函数不能调用自己。

返回数组类型,数组不能直接被返回,需要返回指向数组的指针或者是引用,声明数组的做法是:

typedef int arrT[10];

using arrT = int[10];

函数的重载:

函数名相同,但是形参不同,main函数不能重载,不允许形参相同返回值不同的两个函数重载。

注意重载和const形参:

int look(a&);

int look(const a&);

这两个函数是一样的不算重载,顶层const形参无法和没有顶层const的形参区别起来。

默认实参,就是说在声明函数的时候就给形参赋值了,在C++中规定,在声明函数的时候,一旦一个形参是默认形参他后面的所有形参都必须是默认实参。在调用函数时,可以为默认形参赋新的值,也可以不赋值,要注意变量的顺序,否则可能不能满足程序的初衷。

如果一个函数有默认实参,那么我们在调用他的时候,形参数可以小于实参数。

内联函数在函数的返回值前面加一个inline,内联函数的定义应该放在头文件中。

内联函数应该是那些流程直接,规模较小,调用频繁的函数。

函数指针

函数指针在定义的时候,把函数名改成指针,在左右两端加括号即可。

int bigger(int a,int b);

int (*p)(int a,int b);这个时候p是一个指向函数的指针,该函数的参数是两个整数,返回值也是一个整数。

当把函数名作为一个值使用的时候,该函数自动转换成指针。

p = bigger;|| p = &bigger;

还可以通过指针调用函数:

int result = p(3,5); || int result = bigger(3,5); || int result = (*p)(3,5);

函数指针形参:

函数可以直接做形参,自动转换成指向函数的指针,函数指针也可以做形参。直接使用函数指针显得很麻烦,可以用类别名进行简化。

返回指向函数的指针,返回值不会自动把函数类型转化成指针类型,所以函数的返回值必须指明是指针类型。










原创粉丝点击