一、指向 const 对象的指针
指向 const 对象的指针,指的是指针指向的对象的内容是const的,不可修改,但指针本身(即指针的值)是可以修改的。
例1:
char acConst[] = "const";
const char *pcConst = acConst;
*pcConst = ‘C’; /* Error,像这样修改pcConst指向内容的做法是不允许的 */
pcConst = “const too”; /* OK,像这样修改pcConst的值是允许的 */
二、const 指针
const 指针,指的是指针本身(即指针的值)不可修改,但是,指针指向的对象是可以修改的。
例2:
char acConst[] = "const";
char *const pcConst = acConst;
*pcConst = ‘C’; /* OK,像这样修改pcConst指向内容的做法是允许的, 修改后,acConst的内容变为"Const" */
pcConst = “const too”; /* Error,像这样修改pcConst的值是不允许的 */
上面2种写法是比较容易区分的,下面这个你可能就要混淆了。
char const *pcConst
这个等价于const char *pcConst,还是等价于char *const pcConst?
答案是等价于const char *pcConst。
我对const的理解:
const 是左结合的,若左边为空,则再向右结合。
结合上面2个例子:
①const char *pcConst,这里const的左边为空,则右结合,与char结合。说明char是不可改变的,这样,你就能理解例1中*pcConst = ‘C’;这句为什么错了(‘c’是char型的,所以是不能被修改的哦)。
②char const *pcConst,这里const左边不为空,故左结合,所以还是与char结合,所以char const *pcConst等价于const char *pcConst。
③char *const pcConst,这里const左边不为空,故左结合,所以,const修饰的是char *这个指针,所以指针的值是不可变的,指针的内容是可以变的(见例2)。
这下你记住了吧^_^,那再给你个难的。
例3:
typedef char *pcString;
const pcString pcStr;
请问这个pcStr,到底是等价于const char *pcStr呢还是char const *pcStr呢?我将在留言1楼中给出解答。