C++中const类型(二)----常指针和常引用
2.常指针和常引用
(1)常指针
使用const指针时,由于const的位置不同,而含意不同。下面举两个例子,说明它们的区别。下面定义的一个指向字符串的常量指针:
char *const ptr1 = stirngprt1;
其中,ptrl是一个常量指针。因此,下面赋值是非法的。
ptr1 = stringprt2;
而下面的赋值是合法的:
*ptr1 = “ m ”;
因为指针ptr1所指向的变量是可以更新的,不可更新的是常量指针ptr1所指的方向(别的字符串)。下面定义了一个指向字符串常量的指针:
const *ptr2 = stringprt;
其中,ptr2是一个指向字符串常量的指针。Ptr2所指向的字符串不能更新,而ptr2是可以更新的。因此:
*ptr1 = “ x ”;
是非法的,而:
ptr2 = stringptr2;
是合法的。
所以,在使用const修饰指针时,应该注意const的位置。定义一个指向字符串的指针常量和定义一个指向字符串常量的指针时,const修饰符的位置不同,前者const放在*和指针名之间,后者const放在类型说明符前。
(2)常引用
使用const修饰符也可以说明引用,被说明的引用为常引用,该引用所引用的对象不能被更新。其定义格式如下:
const<类型说明符>&<引用名>
例如:
const double &v;
在实际应用中,常指针和常引用往往用来作函数的形参,这样的参数称为常参数。
在C++面向对象的程序设计中,指针和引用使用得较多,其中使用const修饰的常指针和常引用用得更多。使用常参数则表明该函数不会更新某个参数所指向或所引用的对象,这样在参数传递过程中就不需要拷贝化构造函数,这将会提高程序的运行效率。
下面举一例子说明常指针作函数参数的用法:
#include <iostream.h>
const int N = 6;
void print(const int *p, int n);
void main()
{
int array[N];
for(int i = 0; i < N; i++)
{
cin >> array[i];
}
print(array, N);
}
void print(const int *p, int n)
{
cout << "{" << *p;
for(int i = 1; i < N; i++)
{
cout <<"," << *(p+i);
}
}