const 和指针一起使用,可以归结为三种:
一、指向常量的指针
二、常指针
三、指向常量的常指针
下面依次举例说明:
1. 指向常量的指针:
将指针声明前加上const,使指向的对象为常量,而不是指针为常量。该类指针可以不用初始化。
需要注意的是,该类指针可以指向常量,也可以指向变量。从指针的角度看,它所指向的是常量,通过该指针不能修改它所指向的数据(错误类型是 不能给常量赋值 )。
例如:
int _tmain(int argc, _TCHAR* argv[])
{
int a=1,b=2;
const int c=3;
const int *pi;
pi=&a;
// *pi=10;
a=10;
pi=&c;
cout<<*pi<<endl;
// c=10;
getchar();
return 0;
}
*pi=10 错误:不能给常量赋值; c=10的错误也是:不能给常量赋值。pi可以指向 变量a 也可以指向 常量c。
2.常指针:
要把指针本身声明为常量,采用运算符* const 。该指针称为常指针,必须进行初始化。指针本身为常量,一旦初始化后,不能再指向别的数据。但通过它可以修改指向的数据。实际上,该类指针只能指向变量,而不能指向真正的常量。
例如:
int _tmain(int argc, _TCHAR* argv[])
{
int a=1,b=2;
const int c=3;
// int * const pi=&c;
int * const pi=&a;// initialize at the statement.
*pi=10;
cout<<*pi<<endl;
getchar();
return 0;
}
其中int* const pi=&c; 会引起错误(初始化,无法从const int * 转化为 int * const)
3.指向常量的常指针:两个目标都是常量,必须进行初始化。该类指针可以指向常量,也可以指向变量。不能通过该指针修改它所指向的数据。初始化后也不能让它指向其他的数据。
int _tmain(int argc, _TCHAR* argv[])
{
int a=1,b=2;
const int c=3;
const int * const pi=&c;
const int * const pii=&a;
// *pi=10;
cout<<*pi<<endl;
cout<<*pii<<endl;
a=10;
cout<<a<<endl;
getchar();
return 0;
}
*pi =10;错误(不能给常量赋值) pi可以指向常量c,也可以指向变量a,但都不能通过*p来改变值,可以改变变量a的值。