[C++ rudiment] const 指针

看到编程思想第八章,关于const和指针的种种关系,还是要在这里主要说下,以备后用。
1. 指向const对象的指针。
形式:const int *p;
说明:此处的p是一个普通指针,它指向的是const int对象。也就是说,此处的const限定的是指针p所指向的对象,而指针p本身并不是const,所以在定义时不需要初始化。
我们可以随时修改指针p的值,但却不能修改p指针所指向的对象。
比如说函数FILE *fopen( const char *filename, const char *mode ); 的参数之所以采取这样的形式就是为了达到不能通过指针修改指针指向的内容的目的。
写个例子如下:
#include <iostream>
using namespace std;
int main()
{
 const int *p;
 const int *q;
 int i = 4;
 const int j = 8;
 p = &i;  //const int *指针也可以指向非const对象,但不提倡这么做,没意义的说
 q = &j;
}
注:把一个const对象的地址赋给一个不是指向const对象的指针也是不可以的,比如如下例子:
#include <iostream>
using namespace std;
int main()
{
 const int a = 4;
 int *p = &a;
}
这样是不可以的,因为如果可以把const对象的地址赋给一个一般的指针,就意味着可以通过这个一般的指针来修改它所指向的值了,而它所指向的值是const,这就矛盾了,所以不能用一般的指针指向const对象,只能把const对象赋给指向const对象的指针。
2. const指针
形式:int *const pt;
说明:pt是一个const指针,它指向的是一个int对象。
在这里,const修饰的是指针,即地址,也就是说地址一旦被赋值,就不能被修改了,而它所指向的对象是可以被修改的,看下例:
#include <iostream>
using namespace std;
int main()
{
 int a = 4;
 int *const p = &a; //const对象在定义处必须被初始化
 *p = 5; //该指针指向的值是可以被修改的
 cout<<a<<endl;
}
3. 指向const对象的const指针。
在前面说过了,const对象的地址是不能赋给一般的指针的,如果想把const对象的地址赋给一个const指针,也就是我们要定义一个指向const对象的const指针,我们应该如下定义:
形式:const int *const dp;
说明:dp是一个const指针,它指向的是一个const对象,在这里,指针的值不能改变,它所指向的对象的值也是const对象,也不能被修改。例子如下:
#include <iostream>
using namespace std;
int main()
{
 const int a = 4;
 const int *const dp = &a;
}

完毕。over~

posted on 2009-06-18 18:53  笔记  阅读(285)  评论(0编辑  收藏  举报

导航