1.指向常量的指针
指针所指向的是常量,指针本身是变量。
如const char *pc = "chenk";
pc = "qq"; //正确
pc[2] = 't'; //错误
2.指针常量
指针本身是常量,所指向的是变量
如 char *const pc = "chenk";
pc = "qq"; //错误
pc[2] = 't'; //正确
注意:
1、如果pc不是指针,const与char的位置不管如何交换,所声明的pc都是常量,即const char pc与char const pc没区别。
2、不能将非const对象的指针指向一个常量对象,如:
int *p;
const int i = 9;
p = &i; //错误
引用
是某个对象(即变量)的别名,没有自己的独立空间,要与它所引用的变量共享空间,这也就是为什么能通过引用接收参数,进而改变参数值的原因。
形式如:
int i = 7;
int &ii = i;
注意:
1、引用必须在定义时初始化
2、可以为一个变量指定多个引用,如
int i =7;
int &ii = i;
int &iii = i;
3、一个引用只能是一个变量的别名,不能再次将它指定为其他变量的别名,如
int i = 7, j;
int &ii = i;
ii = j; //错误
4、const引用可以用常量初始化,但非const引用不能用常量初始化,如
const int &cc = 7; //正确
int &yy = 8; //错误
5、不能建立引用的引用;不能建立引用数组,也不能建立数组的引用;可以建立指针的引用,不能建立指向引用的指针
int i = 0,a[10];
int &&ii = i; //错误,ii是引用的引用
int &b = a; //错误,b是数组的引用
int &c[10]; //错误,c是引用数组
int *p = &i;
int *&pp = p; //正确,pp是指针的引用
int &*ppp = i; //错误,ppp是指向引用的指针
6、由于引用参数传递的是实参的地址,因此在调用函数时,不能向引用参数传递常数,如
void swap(int &a, int &b){} //函数定义
int i =4, j = 5;
swap(4,6) //错误的调用
swap(i, j); //正确的调用