zoukankan      html  css  js  c++  java
  • 理解常量指针与指针常量

    目录

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

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

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

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

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

      首先,理解常量和指针两个概念,下面分别定义了一个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;
      }
      
    • 相关阅读:
      搭建一键化编译汇编语言的环境
      Windows内核中的CPU架构8任务段TSS(task state segment)
      80866中断
      x86132位x86 处理器编程架构
      80861计算机的启动过程
      Android 10升级至Android 11后关于startActivity启动应用抛异常处理方法
      通过AndroidJUnit4框架发现用例不会按顺序执行,变成随机了
      2021年11个我们喜爱的DevOps开源工具
      2021年终总结
      CF1204C Anna, Svyatoslav and Maps
    • 原文地址:https://www.cnblogs.com/chenzhen0530/p/14615999.html
    Copyright © 2011-2022 走看看