const char * 和 char *const
Bjarne在他的The C++ Programming Language里面给出过一个助记的方法:把一个声明从右向左读。
char *const cp;(* 读成 pointer to)
// cp is a const pointer to char(代表的是这个cp变量是const修饰的,他的值不能变化)
const char *cp
// cp is a pointer to const char(代表的是这个cp指针是指向const char类型的变量,cp的值可以变化,但是不能用cp来修改所指向的内容)
char const *cp
//与const char *cp等价
Example
char * str; //①指针可以变,指向的内容可以变
char const* str; //②指针可以变,指向的内容不可变
char *const str; //③指针不可变,指向的内容可以变
char const *const str; //④指针不可变,指向的内容不可变
作用
char const *str
或const char * str
指向的字符串不可修改。在很多C标准库的函数里都能看到:
int strcmp(const char* str1, const char* str2)
- 加上
const
的好处是避免不小心修改了不该修改的值,加上const
后就无法修改,会报错,这样做增加了安全性。 - 扩大了该函数的参数的接收范围,使得函数更具通用性。
不能把const char *
赋值给char *
,否则会报错或者是警告