码迷,mamicode.com
首页 > 其他好文 > 详细

指针与 const --- 指针常量与常量指针

时间:2018-03-30 16:19:32      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:post   地址   bsp   开课   一个   程序   array   pci   语句   

注:该文主要来源于 网易公开课之《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 等价

 

指针与 const --- 指针常量与常量指针

标签:post   地址   bsp   开课   一个   程序   array   pci   语句   

原文地址:https://www.cnblogs.com/Waming-zhen/p/8676281.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!