问:什么是引用?
答:引用就是一个变量的别名(相对于真名),引用必须初始化,可以理解为一个变量不能只有别名,总是一个真名变量的别名,因此初始化就是告诉我们这个别名b的真名是a。
引用用于函数参数,比指针的使用更简洁。
int a = 10;
int &b = a;//引用必须初始化
问:指针类型的引用?
答: 类型 *&指针引用名 = 指针;//也就是给指针其了一个别名,这个别名也是指针。
问:const?
答:const是来控制这个变量是不可以改变的。int const *p=&a; const int *p=&a是完全等价的,表示的是p指向的内容(即*p)不可改变;int *const p = &a;表明的是p本身不能改变;
int const *const p = &a;表明的是p和p指向的内容不可改变。
若是变量a本身是const,那么它的指针要体现出*p不可改变,也就是当const int a; 那么指针需写成int const*p = &a;
问:C++的新特性?
答:函数参数默认值,有默认值的参数必须在参数列表的最右端,无实参传入用默认值,否则用实参覆盖默认值;
函数重载,是指在相同作用域内,用同一个函数名的定义的多个函数,参数可变(参数个数和参数类型不同);
内联函数,编译时将函数体代码和实参代替函数调用语句,与普通函数相比,节省了调用函数(2)和返回(4)步骤,提高执行效率,使用上加关键字inline,其他与普通函数没有区别。那么为什么不都用内联函数?因为内联编译是建议性的,由编译器决定;逻辑简单,频繁调用的函数建议使用内联函数;递归函数无法使用内联方式。
问:内存?
答:
申请和释放一个内存:
申请内存,运算符new,int *p = new int;
归还(释放),运算符delete,delete p; p = NULL。
申请和释放一块内存:
int *arr = new int[10]; //申请块内存
delete []arr; arr = NULL; //释放块内存
那么申请内存一定会成功?不一定,所以要判断arr == NULL,若为空指针,说明内存申请失败。注意事项,释放内存时,指针p要赋值NULL,防止误操作调用两次deleter p,就会使得同一内存重复回收,那么计算机就会出现问题。完善的写法如下: