zoukankan      html  css  js  c++  java
  • 指针与 const --- 指针常量与常量指针

    注:该文主要来源于 网易公开课之《C++ 程序设计入门(上)》课件。

    在 C 语言标准中,const 修饰的变量称之为 只读变量,

    在 C++ 语言标准中,const 修饰的变量称之为 常量,

    例:

        const int ARRAY_LEN = 100;

        int array[ARRAY_LEN];    //该语句在C++ 编译器中是可行的,但是在C编译器中是会报错的

    以上是 const 在 C 和 C++ 中的差别,下边主要介绍 const 与指针:

    1. 指针的两个属性

        a. 指针变量本身

        b. 指针变量所指向的内容

    2. 常量指针和指针常量

        a. 常量指针(常指针):指针(p)所指向的内容不能通过指针的间接引用(*p)来改变

        例:

            const int i = 0;

            const int* p1 = &i;    //指针 p1 的类型是 const int*

            *p1 = 10;    //error

        b. 指针常量:指针本身的内容是一个常量,不可以改变

        例:

            int a = 1;

            int b = 2;

            int* const p = &a;    //常量 p2 的类型是 int*

            *p2 = 10;    //ok, a = 10

            p = &b;    //error

    注:数组名是数组首地址的别名,可以说 数组名就是一个指针常量,所以 :

        int a[] = {1, 2, 3, 4};

        a = a + 1;    //error

    3. 变量、常量和常量指针

        a. 

            int i = 10;

            int const *pi = &i;

            *pi = 11;    //error

            i = 11;    //ok

            上述语句只是说明 pi 指向的地址中所存的内容不能通过 *pi 的方式被改变;

        b. 

            const int ci = 10;

            const int* pci = &ci;

            *pci = 11;    //error

            ci = 11;    //error

            上述语句说明 ci 是一个常量,存放在常量区,不能被改变,pci 指向的地址中所存的内容不能通过 *pci 的方式被改变;

        c.

            const int ci = 10;

            int* pci = &ci;    //error

            上述语句说明 ci 是一个常量,存放在常量区,不能被改变,也不能通过 *pci 的方式被改变,所以指向 ci 的指针必须是常量指针。

    总结:

        const int* p;    //语句1

        int const *p;    //语句2

        int* const p;    //语句3

        在前先读,在前不变

        ① *(指针) 和 const(常量)谁在前先读谁;

        ② * 代表被指的数据,名字代表指针地址;

        ③ const 在谁的前面谁就不能被改变。

        ④ 语句1 和语句2 等价

  • 相关阅读:
    eclipse、idea安装lombok插件
    ContextLoaderListener加载过程
    web.xml 文件中一般包括 servlet, spring, filter, listenr的配置的加载顺序
    springboot
    root cause org.apache.ibatis.ognl.OgnlException: source is null for getProperty(null, "XXX")
    Java MyBatis 插入数据库返回主键
    Mybatis异常There is no getter for property named 'XXX' in 'class com.xxx.xxx.UserAccountDTO
    web项目,ftl文件中的路径引入问题
    mybatis No enum const class org.apache.ibatis.type.JdbcType.Integer
    Restful、Jersey和JAX-RS
  • 原文地址:https://www.cnblogs.com/Waming-zhen/p/8676281.html
Copyright © 2011-2022 走看看