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 等价

  • 相关阅读:
    Entity SQL 初入
    ObjectQuery查询及方法
    Entity Framework 的事务 DbTransaction
    Construct Binary Tree from Preorder and Inorder Traversal
    Reverse Linked List
    Best Time to Buy and Sell Stock
    Remove Duplicates from Sorted Array II
    Reverse Integer
    Implement Stack using Queues
    C++中const限定符的应用
  • 原文地址:https://www.cnblogs.com/Waming-zhen/p/8676281.html
Copyright © 2011-2022 走看看