目录
1.占位参数
C++声明函数时,可以设置占位参数,占位参数只有参数类型的声明,没有参数名称的声明
void Func(int a,int );
2.引用
本质:引用的本质是指针常量
int a=100;
int & b=a;
//即
int * const b=&a;
C++增加了按引用给函数传递地址
①引用必须初始化
int a=10;
int &b=a;
②引用初始化之后,就不可以更改指向了
③引用必须是一块可修改的内存空间
④不要返回局部变量的引用
2.1数组的引用
① 先定义数组类型,通过类型定义引用
int arr[5]={1,2,3,4,5};
typedef int(ARRAY_TYPE)[5];
ARRAY_TYPE & arr_ref1=arr;
②先定义数组引用的类型,再通过类型定义引用
typedef int(& ARRAY_TYPE)[5];
ARRAY_TYPE arr_re21=arr;
③直接定义数组引用
int(& arr_ref3)[5]=arr;
3.参数传递的方式
3.1值传递
通过值复制将参数传递给函数。因此修改的是复制的值,原始变量不会改变。
void mySwap(int a,int b)
{
int temp=a;
a=b;
b=temp;
}
3.2地址传递
将参数的地址传递给函数。因此修改的是原始变量的值。
void mySwap(int* a,int* b)
{
int temp=*a;
*a=*b;
*b=temp;
}
3.3引用传递
函数以引用的方式接收参数,此时,修改形参的值即改变了实参的值
void mySwap(int& a,int& b)
{
int temp=a;
a=b;
b=temp;
}
4.指针的引用
4.1C语言下函数间指针的传递
若想用形参修改实参的指针,必须用更高级的指针才行,同级指针是不可以的
int* p=NULL;
//同级指针,修改失败
int func(int* p)
{
*p=100;
}
//高级指针,修改成功
int func1(int** p)
{
**p=100;
}
4.2 C++下指针的引用
int func(int* &p)
{
*p=100;
}
此时,利用引用的方式传递指针,本质将指针的地址串入到函数中,实现了同级指针也能修改参数
5.常量引用
const int & ref=10;
使用场景:参数的传递。防止函数内对参数的误操作
6.函数的重载
6.1满足的条件
- ①同一个作用域
- ②函数名称相同
- ③函数参数个数不同/参数类型不同/参数顺序不同
6.2使用场景
同一个函数名在不同场景具有不同含义
6.3注意事项
①参数作为引用,常量引用和普通引用可以共存
②函数重载时,尽量不要使用默认参数
6.4重载原理
编译器会用不同的参数类型修饰不同的函数名。
6.5extern "C"的使用
C++调用C产生的问题:
解决方式:利用externC
方案一:在cpp中另起一行,声明要调用的C语言函数
extern "C" void show(); //在C++中调用C语言的文件
方案二:在C的头文件最上和最下添加相应的声明代码
//最上
#ifdef __cplusplus
extern "C"{
#endif
//最下
#ifdef __cplusplus
}
#endif