zoukankan      html  css  js  c++  java
  • 常量指针、指针常量、指向常量的指针常量

    1.常量指针

         ❶全称指向一个常量的指针,核心为指针。即一旦指向一个地址,该地址的值不能通过该指针来修改(但可经由指向的变量间接修改);可以更改该指针的值(更改指针指向的地址)。

         ❷定义 const 在“*”左侧。const int *p    int const *p 

         ❸使用

    int a = 5;
    const int b = 8;
    const int *c = &a; //合法
    *c = 6; // 非法。但可间接修改c指向的对象的值:a = 6;
    const int *d = &b; // 更改地址,合法

       ❹函数形参为常量指针但可接受非常量字符串。目的在于限制了外部变量在子函数内部被更改。
                       int strcmp(const char *str1, const char *str2);
    
    

    2.指针常量

         ❶全称指针类型常量(地址不能更改),核心为常量,即值为常量的指针。即一旦指向一个地址,不容许修改指针值(更改指向地址);但可以经过指针更改地址存储的内容。

       ❷定义const 在*右侧 。int *const b。
               注意因为为常量,声明时必须赋给初值,一旦赋值,不可变更。

         ❸使用

    char *a = "abcde1234";
    char *b = "bcde";
    char *const c = &a;
    a[0] = 'x'; // 更改内容,合法。
    *c[0] = 'x' // 更改内容,合法。


    3.指向常量的常量指针

        ❶全称:指针指向存储常量的常年地址。指针指向地址不能更改,地址的存储内容也不能更改

      ❷定义和使用:
          const int a = 25;
          const int * const b = &a;


    4.总结 

    char *a = "abcde1234";
    const char *b = "bcde"; // b是常量指针
    char *const c = &a;  // c指针常量
    const char *const d = &b; // d是指向常量的指针常量

        ❶ b是指向常量的指针变量,当b指向别的字符串,d仍然指向b初始的字符串。
        ❷ b此处静态编译理解成字符串常量指针,不能通过指针b更改内容。

    char a[] = "hello";
    char b[] = "world";
    const char *p1 = a;
    char* const p2 = b;

      对于以上定义 p1++即移动指针合法,但是修改不合法。对于p2, *p2='c'即修改合法,但是移动p2不合法。



    本文参考:

       常量指针与指针常量的区别(转帖)


  • 相关阅读:
    stompjs使用
    WKWebView新窗口打开链接
    iOS实现自定义拍照页面
    Universal Link
    社群app开发问题记录
    C#中try catch finally
    如何生成代码项目的工程结构
    C# SqlSugar基于 .NET 开源ORM框架
    C# DataGridView 行和列的操作
    禁止EditText 自动弹出软键盘
  • 原文地址:https://www.cnblogs.com/engineerLF/p/5393073.html
Copyright © 2011-2022 走看看