引用:变量的别名
引用不能单独存在,所以不能只有别名
引用必须初始化
1、基本数据类型的引用
int a = 3;
int &b = a;
b = 5;
cout << a << endl;
2、结构体类型的引用
typedef struct{
int x;
int y;
}Coor;
Coor c1;
Coor c = c1;
c.x = 1;
c.y = 2;
cout << c1.x << "," << c1.y << endl;
3、指针类型的引用
int a = 10;
int *p = &a;
int *&q = p;
*q = 20;
cout << a << endl;
4、引用做参数
void fun1(int &a, int &b){
int c(0);
c = a;
a = b;
b = c;
}
控制变化的const
1、const与基本数据类型
int x = 3;//变量
const int x = 3;//常量
变量名 | 存储地址 | 存储内容 |
---|---|---|
x | &x | 3 |
x | &x | 3(不可变) |
2、const与指针
const int *p = NULL;//*p不可变
int *const p = NULL;//p不可变
const int *const p = NULL;//*p、p均不可变
3、const与引用
int a = 3;
const int &b = a;
ps. const控制后面的变量,使其存储内容不可更改。
函数新特性
1、参数默认值
有默认参数值参数位于参数表最右侧
声明函数时给默认值,定义函数时不用
无实参则用默认值,有实参则覆盖默认值
int fun(int i, int j=1, int k=2);//声明
int fun(i,j,k){
int sum(0);
sum = i + j + k;
return sum;
}
2、函数重载
在相同的作用域内,用同一函数名定义的多个函数,参数个数和参数类型不同。
int get_max(int x, int y);
double get_max(double x, double y);
编译器如何识别重载函数?
get_max_int_int
get_max_double_double
3、内联函数
关键字 inline
建议性编译
好处:减少函数调用步骤,提供程序效率
适用于逻辑简单(不含for、while循环),调用频繁的函数
递归函数不能作为内联函数
内存管理
内存本质是资源,由OS掌控,我们能做的是申请/归还。
内存的申请与归还
申请 new
归还 delete
//申请内存
int *p = new int;
delete p;
p = NULL;
//申请块内存
int *arr = new int[1000];
if(NULL == arr){
cout << "内存申请失败" << endl;
}
else{
//do
}
delete []arr;
arr = NULL;
ps. new与delete配套使用
申请内存需要判断时候成功,释放内存需要设空指针。