const和指针

char greeting[] = "Hello";
char* p = greeting;                  //non-const pointer, non-const data
const char* p = greeting;          //non-const pointer, const data
char* const p = greeting;          //const pointer, non-const data
const char* const p = greeting;  //const pointer, const data

//const 虽然变化多端,但并不高深莫测。
//如果关键字const出现在星号的左边,表示被指物是常量;
//如果关键字const出现在星号的右边,表示指针自身是常量;
//如果出现在星号两边,表示被指物和指针两者都是常量。


//Effective C++

 

#include <iostream>

int main()
{
    int a = 3;
    int b;
    
    //定义的const的指针(指针指向的内容不能被修改,但指针的地址可以改变)
    const int* p1;
    int const* p2;

    //定义const指针(由于指针本身的地址不能被修改,也就是指针指向的地址是固定的,所以必须声明的同时初始化,指针所指向地址的值是可以改变的)
    int* const p3 = &a;

    //指针本身的地址和它指向的内容都是不能被修改,所以声明的同时初始化
    const int* const p4 = &a;
    int const* const p5 = &b;

    p1 = p2 = &a;        //正确
    *p1 = *p2 = 8;        //不正确(指针指向的内容不能被修改)

    *p3 = 5;            //正确
    p3 = p1;            //不正确(指针本身的地址不能被修改)

    p4 = p5;            //不正确(指针本身的地址和它指向的内容都是不能被修改)
    *p4 = *p5;            //不正确(指针本身的地址和它指向的内容都是不能被修改)

    return 0;
}

 

posted @ 2012-04-30 17:15  waynewuzhenbo  阅读(265)  评论(0编辑  收藏  举报