谈const关键字

今天被人问起,const关键字在与指针结合时的问题,一时无语。于是做了以下的实验:

char mychar = 'q';

char * mypoint = &mychar;


const char * myconst1 = &mychar;
char const * myconst4 = &mychar;
char * const myconst3 = &mychar;

const char const * myconst2 = &mychar;
const char * const myconst3 = &mychar;
char const * const myconst6 = &mychar;

const char const * const myconst5 = & mychar;

 

使用Intel C++ Compiler 8.0 编译,得出如下结果:

char mychar='5';
char   *  mypoint =&mychar; // common pointer
///define for const object
//const object must be initialize if not extern variable
 int main ()
{
 // Test for const 1
    const char * myconst1 = &mychar;    //a pointer which point to a const char
    myconst1++;    //Pass
    ++myconst1;    //Pass
    (*myconst1)++;    //Error, can not modify the value
    ++(*myconst1);    //Error, can not modify the value

 // Test for const 2
 char const * myconst2 = &mychar;    // a pointer which point to a const char
    myconst2++;    //Pass
    ++myconst2;    //Pass
    (*myconst2)++;    //Error, can not modify the value
    ++(*myconst2);    //Error, can not modify the value

 // Test for const 3
 char * const myconst3= &mychar;     //a const pointer which point to a char
    myconst3++;    //Error, can not modify the pointer
    ++myconst3;    //Error, can not modify the pointer
    (*myconst3)++;    //Pass
    ++(*myconst3);    //Pass

 // Test for const 4
 const char const * myconst4= &mychar;    // a pointer which point to a const char
    myconst4++;    //Pass
    ++myconst4;    //Pass
    (*myconst4)++;    //Error, can not modify the value
    ++(*myconst4);    //Error, can not modify the value

 // Test for const 5
 const char * const  myconst5= &mychar;    // a const pointer which point to a const char
    myconst5++;    // Error
    ++myconst5;    // Error
    (*myconst5)++;    // Error
    ++(*myconst5);    // Error

 // Test for const 6
  char const *const  myconst6= &mychar;    // a const pointer which pointer to a const char
    myconst6++;    // Error
    ++myconst6;    // Error
    (*myconst6)++;    // Error
    ++(*myconst6);    // Error

 // Test for const
  const char const * const myconst7 = &mychar;    // a const pointer which pointer to a const char
    myconst7++;    //Error
    ++myconst7;   //Error
    (*myconst7)++;   //Error
    ++(*myconst7);   //Error

 return 0;
}

 

结论:

其实结论是最简单的,const按照从右到左的结合法则去读,就知道这个const定义的实际含义。比如说
const char const * myconst 与const char * myconst其实是等价的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值