常量指针和指针常量 C / C++

按英文的字面意思,从右向左理解就比较清楚了:

const char *pointer

常量指针(底层const):pointer to const

字面意思:指向常量的指针,不能通过这个指针修改指向的内容

 

 

char *const pointer

指针常量(顶层const):const pointer

字面意思:指针本身是个常量,不能修改这个指针的指向

 

 

看一段代码:

    char hello[6] = "hello";
    char world[6] = "world";

    const char *p2const = hello;    // pointer to const
    char *const constp = hello;     // const pointer

    p2const = world;    // value of p2const is "world"
    // constp = world;  // constant pointer cannot be reassigned

    constp[0] = 'y';       // value of constp is "yello"
    // p2const[0] = 'y';   // pointer to constant, cannot change the value

    cout << p2const << ' ' << constp << endl; // "world yello"    

 

! 注:C++中  auto  类型推断会忽略顶层const,保留底层const。如果设置为  auto&  auto的引用时,顶层const性质保留

 

! 令: constexpr +指针类型,虽然写在左边,但效果和写在最右边的 const 效果是一样的,会让变量变为指针常量。

即 constexpr char *等价于  constexpr char * const等价于 char * const

posted @ 2021-03-09 12:38  HarryPotterIsDead!  阅读(302)  评论(0编辑  收藏  举报