有关指针常量与常量指针、指向常量的常量指针

本文深入浅出地介绍了C++中指针与常量的结合使用,通过实例代码展示了指针常量、常量指针以及指向常量的常量指针的差异。强调了从右到左分析const修饰符作用的原则,并指出在实际开发中,指针常量的常见用途。同时,推荐了const的合理书写方式。
摘要由CSDN通过智能技术生成

如题,对于C/C++初学者来说指针是不好更理解与使用的,如果在加上常量修饰符就更晕菜了。如果有一段时间不接触这三个名词的话 ,有时候也是反应还过来的!所以还是需要经常要思故而知新一下。如下所示,是对于常量与指针的快速记忆指引(来自hackingcppp pointers
在这里插入图片描述
从右到左扫(分析),const 跟着(修饰)谁就对谁起作用!(const的作用就是不可变),const修复指针,标示指针的值不可变,指针的值不可变意味着它只能指向某个变量,const修复类型,标示指针指向的变量的值不能变,需要注意这里的变量的值不可变仅仅是指不能通过指针进行求值操作去改变该变量的值,而通过变量名去改变变量的值还是可以的。

// 从右到左,一开始是* 即指针没有被 const修复,然后是const 接着 T,即T被const修饰了,这个情况下称之为指针常量,指针本身可能变,但不能通过指针去修改该变量的值!
T  const *  

示例代码如下

#include <iostream>

int main() {
    int a = 100;
    int b = 200;
    //1. 普通指针,指针的值可以变,通过指针也可以修改指向变量的值
    int * commonP = &a;
    commonP = &b;
    *commonP = 300;
    printf("a = %d, b = %d, commonP = %d\n", a, b, *commonP);
    //2. 指针常量,不能通过指针修改批向变量的值
    const int * pConst = &a;
//    int const * pConst = &a;这种写法也是等价的,
    pConst = &b;
    //Read-only variable is not assignable
    //*pConst = 400;
    printf("a = %d, b = %d, pConst  = %d\n", a, b, *pConst);

    //3. 常量指针,只能赋值一个变量的地址,固定指向一个变量,可以通过指针修改变量的值
    int * const constP = &a;
    // Cannot assign to variable 'constP' with const-qualified type 'int *const'
    //constP = &b;
    *constP = 400;
    printf("a = %d, b = %d, pConst  = %d\n", a, b, *constP);

    //4, 指向常量的常是指针,就剩可读了
    int const * const constPconst = &a;
    // Cannot assign to variable 'constPconst' with const-qualified type 'const int *const'
    //constPconst = &b;

    // Read-only variable is not assignable
    //*constPconst = 500;
    printf("a = %d, b = %d, pConst  = %d\n", a, b, *constPconst);

    return 0;
}

在实际项目开发中,最常见的或最常使用的是指针常量(通常用这种写法 const T * )原因通常我们不想在函数调用栈上出现型参对象的生成,同时也是不想改变实参对应的值,C++更多的使用引用常量

** 有关const的写法推荐 **
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值