指针常量与常量指针的分辨

#include<iostream>
#include"stat.h"
using namespace std;

int variable = 1;

int main()
{
    //常量指针测试: a --- left                            就是指向常量的指针
    const int a = 10; //a是一个常量
    int c = 100;
    const int * left = &a; // 指针符号 * 离 变量left比较近,故left 是一个指针,
                           //它指向一个不可变的常量 a,
    //它是常量修饰的指针,即不能通过* left 来修改 其指向对象a 值的大小
    cout<<"right = "<<right<<" *right = "<<*right<<endl;
    cout<<"left = "<<left<<" *left = "<<*left<<endl;
    // *left = 9;   不可改变 Read-only variable is not assignable,
    //不可通过left指针修改其指向的内容
    left = &c;//可以更改left 的指向,如此例即将left指向了新变量c
    cout<<"After changed:"<<endl;
    cout<<"left = "<<left<<" *left = "<<*left<<endl;

    //指针常量测试:  b --- right        指向的位置不可变,
    //即指向一块固定的变量地址,不能指向别人了
    int b = 20;// b 是一个普通变量
    int * const right = &b;//right是一个指针常量,是一个常量,故地址不可变,故指向的变量不可变
    //right是指针修饰的常量,具有指针的性质,故可以通过 *right 来更改指向对象b的值,
    //但其指向的地址被牢牢锁定了
    *right = 19;//可以通过right指针来更改指向的变量b
    cout<<"After changed: right = "<<right<<" *right = "<<*right<<endl;
    int d = 18; //新变量d,无法改变right指针的指向
    // right = &d; Cannot assign to variable 'right' 
    //with const-qualified type 'int *const'
    return 0;
}

/*
 * 总结:
 *       以星号 * 为分界点,若const在 * 号右边,则为指针常量
 *                        若const在 * 号左边,则为常量指针
 *
 * int * const p=&a; 这个const修饰的是p,所以p不可以指向别的内存区域; 指针常量
 *  const int *p = &a; 这个const修饰的是 int *, 常量指针
 *  即指向的那个内存区域,故使用该指针是改变不了那个内存区域的内容的,但是那个内存区域本身是可以改变
 *
 */

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值