C++ 一些笔记

1、指针、引用和const

1 int i=42;
2 int &a = i;
3 int *p ;
4 int *&r=p;//r是对指针的引用
5 r=&i;//实质上是将p指向i
6 *r=0;//实质上是将i的值变为0;
7 a =3;

引用实质上是对变量起个别名,它本身不是一个对象,只是与初始值绑在一起。因此他定义的时候必须初始化,且不能更换到其他对象,也不存在引用的引用。普通的“非常量引用“只能引用一个对象,不能引用一个常量,用const限定的“常量引用”可以引用一个常量,也可以引用一个普通变量。(这里“常量引用”只是一个对const的引用的简称,实际上不存在常量引用,因为引用不是一个对象)

1 int i =1;
2 const int &a = i;
3 i = 3;//这句话是对的。并且a的值也会跟着变了
4 a =2//这句话是错的。
5 cout<<a;

指针本身是一个对象,因此可以复制和赋值,且可以指向不同的对象,指针定义的时候可以不初始化,也就是可以为空。可以有指向指针的指针。

存在指针的引用 ,不存在指向引用的指针。 指针是一个对象因此存在常量指针。如下:

const int *p = &i;//指向常量的指针
int const *p = &i;//效果上面一样
int *const q = &i;//常量指针

*p = 1;//错误,p指向的是常量不能更改。
p = &c;//正确,p的地址可以换
*q = 1;//正确
q = &c;//错误,p的地址不能更改。

 2、指针形参,数组形参,引用形参

指针的行为跟其他非引用类型一样,当执行指针拷贝操作时,拷贝的是指针的值,拷贝之后两个指针不是一个指针。

 1 void fun(int *p){
 2     *p=0;
 3     p=0;
 4 }
 5 
 6     int i =42;
 7     int *p = &i;
 8     cout<<p<<endl<<*p<<endl;
 9     fun(p);    
10     cout<<i<<endl<<p<<endl<<*p;

输出结果

可以看出指针的值改变了,但是指针本身没有改变。

引用形参,其实就是一个引用,操作的还是其本身,因此在函数中改变其值,函数外也改变。因为都是自己。

数组形参,不允许拷贝数组,数组将转换成指针。我们实际上传递的是数组首元素的指针。

2、extern 和 static、const

posted on 2016-09-19 21:28  muqidi  阅读(133)  评论(0编辑  收藏  举报

导航