关于Const指针的一点补充

OsChina上一个朋友给出的例子,很能说明问题:

typedef char * CharPtr;
    const CharPtr mycharptr = "Hello, World";
    mycharptr[0]='h'; //OK[1]
    mycharptr = "It's Wrong"; //Err[2]

      如果把CharPtr替代掉的话,那么似乎[1]是错的,[2]是对的,因为const char *是指向const char的指针,指针可以指向别的,但是指向的内容不能变。实际上,const只是编译器的一种规范,所以编译的时候只按照语法检查是不是改变了,char*被typedef之后,可以当成一种简单类型看,那么const CharPtr 就只一个CharPtr型的常量,对它的赋值肯定会引起编译错误,而[0]这种寻址并不影响。

      不过,如果把typedef 改为宏替换(如下),事情就不一样了,毕竟宏替换只是一种替换而已,不会引起编译器的检查,编译之前,CharPtr就已经被替换掉了。

#define CharPtr char *
const CharPtr mycharptr = "Hello, World";
    mycharptr[0]='h'; //Err
    mycharptr = "It's Wrong"; //OK

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值