本文目的:记录MOOC上北大C++课程学习笔记,本文为第一周:从C到C++。
定义:类型名 & 引用名 = 某变量名。比如 int & r = n;
三点注意:
定义引用时,前面加const关键字,即为“常引用”:const int & r = n;
//某个变量的引用,等价于这个变量,相当于该变量的一个别名。
//示例1
int n = 4;
int & r = n; // r引用了n,r的类型是int &。此后,n就是r,r就是n
r = 4;
cout << r; //输出 4
cout << n; //输出 4
n = 5;
cout << r; // 输出5
//示例2
double a = 4, b = 5;
double & r1 = a;
double & r2 = r1; // r2也引用 a
r2 = 10;
cout << a << endl; // 输出 10
r1 = b; // r1并没有引用b
cout << a << endl; //输出 5
//引用的作用一:作为函数形参
//C语言中利用指针交换两个数字,而C++中可以利用引用
void swap( int & a, int & b){
int tmp;
tmp = a; a = b; b = tmp;
}
int n1, n2;
swap(n1,n2) ; // n1,n2的值被交换
//引用的作用二:作为函数的返回值
int n = 4;
int & SetValue() { return n; }
int main(){
SetValue() = 40;
cout << n; //输出 40
return 0;
}
//不能通过常引用去修改其引用的内容,但内容可以用其它方式改变
int n = 100;
const int & r = n;
r = 200; // 编译错
n = 300; // 没问题
//小测验:下面哪个选项正确?
A) int n = 4;
int & r = n * 5;
B) int n = 6;
const int & r = n;
r = 7;
C) int n = 8;
const int & r1 = n;
int & r2 = r1;
D)) int n = 8;
int & r1 = n;
const int r2 = r1;
我的理解:
const int MAX_VAL = 23 ;
const string SCHOOL_NAME = "Peking University" ;
//不可通过常量指针修改其指向的内容,但内容可被其他方式改变,常量指针也可以指向其他地方
int n,m;
const int * p = & n;
* p = 5; // 编译出错
n = 4; //ok
p = &m; //ok
//不能把常量指针赋值给非常量指针,反过来可以
const int * p1; int * p2;
p1 = p2; //ok
p2 = p1; //error
p2 = (int * ) p1; //ok,强制类型转换
//函数参数为常量指针时,可避免函数内部不小心改变参数指针所指地方的内容
void MyPrintf( const char * p ){
strcpy( p,"this"); // 编译出错,strcpy要求p为char * 类型
printf("%s",p); //ok
}
int * pn;
pn = new int; //动态分配大小为 sizeof(int)内存空间,并将该空间的起始地址赋值给pn
* pn = 5;
delete p;
delete p; //导致异常,一片空间不能被delete多次
int * pn;
int i = 5;
pn = new int[i * 20];
pn[0] = 20;
pn[100] = 30; //编译没问题。运行时导致数组越界
delete [] p; //注意数组的释放方式
原文:https://www.cnblogs.com/inchbyinch/p/12153438.html