• 指针与 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 等价

  • 相关阅读:
    JAVA--导数到Mongodb
    关于jquery的事件委托-bind,live,delegate,on的区别发展
    cookies localStorage和sessionStorage的区别
    px em 和rem之间的区别
    js中string常用方法
    js中number常用方法
    json格式常用操作
    Node.js到底是做什么的?这是我看到最好的解释了
    数组常用操作方法
    JQuery.Ajax()的data参数类型
  • 原文地址:https://www.cnblogs.com/Waming-zhen/p/8676281.html
Copyright © 2020-2023  润新知