C/C++指针详解之一

本文探讨了C/C++中const关键字在指针声明时的位置不同所带来的影响。const int * p 表示指针指向的值不可变,而 int * const p 表明指针本身不可变。通过示例代码展示了这两个声明的区别,并指出即使使用const int *p,仍然可以通过某些方式改变其指向的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       网上很多人已经写过关于指针用法文章,对于指针,我结合一些具体的实例,写一点自己的看法。

第一篇:const int * p和int * const p

       这个问题是老生常谈的问题,但我还是有很多人到真正使用的时候就犯迷糊,希望看过如下的解释,能够彻底明白。

       首先,我们要牢记一点:const在*前是修饰指针所指向的变量,const在*之后是修饰定义的指针本身。

       const本身起到的修饰作用是“常量”。例如const int *p,const修饰的是*p,也就是指针p所指向的值必须是个常量;而int * const p,const修饰的是指针p本身,也就是指针p必须是个常量。请看例子example01和example02:

  1. /*VC++6.0 IDE*/
  2. //example01
  3. int main(int argc, char* argv[])
  4. {
  5.        int a = 12;
  6.        const int * p = &a;
  7.        *p = 0;   //将指针p指向的值修改为0,编译会报错:error C2166: l-value  specifies const object
  8.        return 0;
  9. }
    • //example02
    • int main(int argc, char* argv[])
    • {
    •        int a = 12;
    •        int b = 10;
    •        int * const p = &a;
    •        *p = 0;   //正确
    •        p = &b;  //将指针p本身的值修改为&b,编译会报错: error C2166: l-value specifies const object
    •       return 0;
    • }

         通过上面的例子,可以看到const修饰的作用。但是是不是const int *p定义的指针p指向的值永远不能改变?否!请看下面例子:

  1. /*VC++6.0 IDE*/
  2. //example03
  3. int main(int argc, char* argv[])
  4. {
  5.     int a = 12;
  6.     const int * p = &a;
  7.     //*p = 0;   //将指针p指向的值修改为0,编译会报错:error C2166: l-value  specifies const object 
  8.     a = 0;       //不能通过*p = 0来修改p指向的值,但是可以通过这样的方法进行修改
  9.     cout << *p << endl;  //打印出0
  10.     return 0;
  11. }
  1. 而int * const p定义的指针p本身的值也不可以改变呢?是的。一旦初始化赋予a的址值,此时int * const p中的指针p本身值就再也不能改变了。
  1.  经过上面一番周折,现在可以很容易理解const int * const p的意思了吧。它定义的是一个指向常量值的常量指针。我想我也不必多费口舌了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值