C++ 大学MOOC 北大课程(郭炜老师)听课整理 第一周

引用

概念

1)定义方式:类型名 & 引用名=同类型的变量名
例如:

 int t; int & n = t;

则定义了一个类型为int& 的引用 名叫 r 其用变量t初始化 结果就是r引用了t。
2)某个变量的引用和这个变量是一回事 就是变量的别名
3)定义引用必须初始化 一般用变量进行初始化 也可以用引用初始化
引用一旦初始化 其就一直引用这个变量
引用只能引用变量

应用示范(交换函数swap())

1)在c语言中 我们可以使用指针来完成两个变量之间的交换

void swap(int * a, int * b){
 int tamp;
 tamp = *a; *a = *b; *b = tamp;
}
int a, b;
swap(&a, &b);

2)而在C++中出现了引用 就可以

void swap(int &a, int &b){
 int tamp;
 tamp = a; a = b; b = tamp;
}
int a, b;
swap(a, b);

引用作为函数返回值

示例代码

int n;
int & Setvalue(){
 return n;
}
Setvalue() = 40;
int & r = Setvalue();

如上 Setvalue()函数的返回值类型是引用,其用变量 n 来初始化,其结果就是Setvalue()函数返回值成为了 n 的引用;
第5条代码对Setvalue()函数的返回值进行赋值,其结果就是将变量 n 的值改为了40;
第6条代码定义了引用 r ,并用Setvalue()函数的返回值对其进行初始化,其结果就是 r 也成为了 n 的引用;

常引用

1)定义引用时,在前加const关键字,即为常引用,例如:

int n;
const int & r = n;

此处定义了常引用 r ,其类型为const int &
2) 不能通过常引用修改其引用的变量
3)可以使用 T 或 T & 类型的变量或引用来初始化 const T & 类型的常引用
4)不可以使用常变量 const T 或常引用 const T & 来初始化引用 T &(除非强制类型转换)

const关键字

常量

例如:

const int i = 23;
const string name = "peter";

常量指针

1)定义方式:const T * 指针名
2)不能通过常量指针修改其指向的内容(并不是说其指向的内容不能被修改)
例如:

int n,m;
const int * p=&n; //定义常量指针 p
*p=5;//试图通过 p 来修改变量 n 编译出错
n=4;//但 n 可以被修改
p=&m;//常量指针可以变换指向

3)不能把常量指针赋值给非常量指针,反过来可以
4)常量指针作为函数参数,可以避免在函数体内修改该指针指向的内容
例如:

void Myprintf(const char * p){
 strcpy(p,"this");// 试图在函数内部修改指针 p 指向的字符串 编译出错
 printf("%s",p);// 没有修改 编译无错
}

常引用

见上文

动态内存分配

用new运算符动态分配内存

分配出一个变量空间:

1)方式:T * p=new T;
2)T 为任意类型名 p 为 T *类型
3)系统将分配出一个大小为 sizeof(T) 的内存空间,并将该空间的其实地址赋值给指针变量 p
例如:

int * p;
p = new int;
*p = 5;

分配出一个数组空间

1)方式:T * p=new T[N];
2)N为要分配数组元素的个数
3)系统将分配出大小为 sizeof(T)*N 的内存空间,并将该内存空间的起始地址赋值给指针变量 p
例如:

int * p;
int i=5;
p = new int[i];
p[0] = 5;

用delete运算符释放动态分配的内存空间

1)new 出来的内存空间必须 delete 掉 方式:delete 指针名
2)delete 掉数组空间时要加 [ ] 方式: delete [] 指针名
例如:

int * p;
p = new int;
*p = 5;
delete p;
p = new int[10];
p[2] = 10;
delete[] p;

内联函数、重载函数、函数参数缺省

内联函数 inline

1)为了避免出现反复调用只有几条语句函数而产生的过多时间开销,引入内联函数机制
2)调用内联函数时,系统直接将函数代码插入到调用语句处
例如:

inline max(int a, int b){
 if (a > b)
  return a;
 else
  return b;
}

函数重载

1)一个或多个函数若名字相同但参数表不同(参数类型,参数个数),则称这些函数重载
2)调用名字相同的重载函数通过所给参数
例如:

int max(int a, int b){};//(1)
int max(int a, int b, int c){};//(2)
double max(double a, double b){};//(3)
max(2.3, 2.5);//调用(3)
max(2,3);//调用(1)
max(1,2,3);//调用(2)

函数参数缺省

1)当定义函数时,最右边连续若干个参数有缺省值时。当调用函数,相应位置不写参数,则为缺省值
2)只能从最右边连续若干个参数缺省

发布了16 篇原创文章 · 获赞 17 · 访问量 761

猜你喜欢

转载自blog.csdn.net/weixin_45644911/article/details/104134218