const int *a 是指向const int 变量的指针,const int *& a 是指向const int 变量的指针的引用,在座函数形参时,区别是很大的,函数的参数进行的是值拷贝,即使传的是指针,也的对指针(即指针里存的地址)的拷贝,因此,如果在函数内部改变了参数自身的地址,比如使参数等于NULL,此时是不会影响函数外指针的本身的地址值的,但使用指针的引用的话就可避免这种情况,指针的引用等效于指针的指针。
const int *a;
a是一个指针,指向const int类型的变量。
const int * &a;
a是一个引用,引用的是一个 const int *的指针。
例如:
int a = 10;
const int *pa = &a;
const int * &rpa = pa;
cout<< *pa <cout<< *rpa < pa是一个的类型是const int *,指向a,const的意思是不能修改pa指向的变量的值。
rpa是一个const int * &类型,是pa的一个引用,用法跟pa一样。
这里就是弄清楚引用,例如
int a = 10;
int &ra = a;ra就是a的引用,ra实际上指向a的地址,但是它不是指针,是引用,是a的别名,用法跟a一样。
cout<输入也是10.
const int * a 是整型常量指针,它所指向的对象值不可改变,
const int *&a是整型常量指针的引用,它定义了一个整型常量指针的引用(或别名)。
他们两个的主要区别:第二个在声明时必须初始化,它本身并不占用内存,只是它所指向对象的别名。引用在初始化后不可修改。
第一个可以只声明不初始化,在使用时再赋值即可。在声明后就对其分配了内存空间。
注:指针和引用的主要区别:
1、可以定义指针的引用,没有引用的指针
2、可以定义数组的引用,没有引用的数组
3、可以定义指向空值的指针,不能定义指向空值的引用。
希望对你有所帮助!
const int * & a是引用
两个a用法差不多,但意义有区别
引用相当于别名,具体参见C++相关说明