理解常量指针与指针常量

目录

    这篇文章的目的是为了理解"常量指针"和"指针常量"两个概念,很是头疼;

    后来发现了一种方法,能够方便的记忆,这种方式就是抛弃这两个中文词汇;

    为什么要记忆这两个词汇呢,明白其作用以及用法,就已经足够了啊;

    如果面试被问到,也没有关系;

    那么,从现在开始,先忘记这两个词汇,按照下面的步骤进行理解记忆:

    首先,理解常量和指针两个概念,下面分别定义了一个int类型的常量,以及一个指向int类型变量的指针:

    定义一个int类型的变量, 下面两种定义方式都是可以的:

    // int 类型的常量
    const int a = 10; // 常量声明时,必须初始化;
    int const a = 10; // 这种定义方式也是可以的
    

    定义一个指向int类型变量的指针:

    int a = 10;  // 定义一个int类型的变量
    int * ptr = &a;  // 定义一个指向int类型变量的指针;
    

    重点来了,

    其次,对于c++中的基本数据类型,例如int, double等都有变量, 常量之分;

    同样,对于指针*,也属于c++中的一种数据类型,肯定也有对应的常量;

    那我们就想了,常量这个词代表的含义是不变,那么有两种角度来描述不变这种性质:

    • 指针本身是常量:表示指针的指向是不能被改变的;
    • 指针指向的对象是常量: 表示指针所指向的对象是个不能被改变;

    (有没有发现,两者是一种的深度上递进的关系)

    最后,最重要的是如何看懂代码和写出代码呢?

    要有一个清晰的概念,在指针标识符*前面的是用于修饰指针所指向的对象,指针标识符*后面的用于修饰指针本身;

    如何记住上面这句话呢,例如,我们创建一个指针变量,方式如下:

    int * ptr = &a;
    

    指针标识符前面的int表示的是指针所指向对象的类型,因此,指针标识符*前面的都是用来修饰指针所指向对象的状态;

    所以,想要表示一个指针指向的对象是常量, 如下:

    int a = 10;
    const int * ptr = &a;
    int const * ptr = &a; // 常用前者
    

    表示一个指针本身是常量:, 如下;

    const int a = 10;
    int * const ptr = &a;
    

    测试程序如下:

    #include <iostream>
    
    using namespace std;
    
    
    int main(){
        
    
        // 指针所指向的对象是常量,指向的对象不可以改变;
        int a = 10;
        const int * ptr = &a;
    
        int b = 20;
        ptr = &b;
    
    
        // 指针本身是常量,指针的指向不可改变
        int c = 30;
        int * const ptr1 = &c;
    
        *ptr1 = 40;
    
    
        return 0;
    }
    
    posted @ 2021-04-04 13:04  chenzhen0530  阅读(193)  评论(0编辑  收藏  举报