常量指针和指针常量 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