• 关于const修饰指针


    const修饰指针,一般分为如下四种情况:

    int b = 500;

    const int *a = &b;   //情况1

    int const *a = &b //        2

    int* const a = &b //   3

    const int* const a = &b//  4

    如何区别呢?
    1)先看情况1。
    如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常
    量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。因此,1和2的
    情况相同,都是指针所指向的内容为常量(const放在变量声明符的位置无关),这种情况下
    不允许对内容进行更改操作。
    换句话来说,如果a是一名仓库管理员的话,他所进入的仓库,里面的货物(*a)是他没权
    限允许动的,仓库里面的东西原来是什么就是什么;所以

    int b = 500;

    const int* a = &b;

    *a = 600; //错误

    但是也有别的办法去改变*a的值,一个是通过改变b的值:

    int b = 500;

    const int* a = &b;

    b = 600;

    cout << *a << endl  //得到600.

    还有一种改变*a办法就是a指向别处(管理员换个仓库):

    int b = 500, c = 600;

    const int*a = &b;

    a = &c;

    cout << *a << endl  //得到600

    对于情况1,可以先不进行初始化。因为虽然指针内容是常量,但指针本身不是常量。

    const int* a; //正确

    2)情况2与情况1相同。
    3)情况3为指针本身是常量,这种情况下不能对指针本身进行更改操作,而指针所指向
    的内容不是常量。
    举例来说:如果a是一名仓库管理员的话,他只能进入指定的某仓库,而不能去别的仓
    库(所以a++是错误的);但这个仓库里面的货物(*a)是可以随便动的,(*a=600是正确
    的)。
    此外,对于情况3:定义时必须同时初始化。

    int b = 500, c = 600;

    int* const a; //错误,没有初始化

    int* const a = &b; //正确,必须初始化

    *a = 600  //正确,允许改值

    cout << a++ << endl; //错误

    4)对于情况4为指针本身和指向的内容均为常量。那么这个仓库管理员只能去特定的仓
    库,并且仓库里面所有的货物他都没有权限去改变。

  • 相关阅读:
    转载一个好用的div弹出层插件
    asp.net 母版页使用方法
    visual studio 代码排版组合键
    模仿米折网商品图片自动翻页效果
    BinaryWriter 、BinaryReader在读写
    Java 8 Lambda 表达式
    IBeacon协议分析
    Centos配置jdk和tomcat环境
    apidoc 生成Restful web Api文档
    数组和链表的区别
  • 原文地址:https://www.cnblogs.com/mingyunrangwozoudaoxianzai/p/7151165.html
Copyright © 2020-2023  润新知