const指针笔记

起因是一段学习示例代码

void Const_ptr_2()
{
	char* const s = "Pentag";        //这句代码报错了
}

这是一个const指针用法的样例代码,但是我放在编译器运行后却发现错误了(目前发现了解决方法,但是好像不是我想要的效果,后面会说)

        这段代码意味着 s 是一个常量指针,它始终指向某个固定内存区域,而不是可以改变的内存区域。

        "Pentag"这是一个字符串常量,它被定义为 const char * 的类型,而它被赋予给了char * const s ,这是不允许的。

        这里有一个矛盾:“pentag”是一个只读的内存区域,而s是一个可以改变指向的变量。在C\C++中,常量不能被重新定义为非常量变量,如果想将字符串常量赋值给一个指针,那么指针必须被定义为 const char * 而不是 char * const 。这是其中一种解决办法,但并不是我想知道的,因为这显然和这个例子背道而驰。

        于是我又发现一种写法:

const char * str ="Pentag";
char * const s = str;

在这段代码中,s是一个常量指针,它始终指向"Pentag"这个字符串的首地址。即使我修改str,也不会改变s的值,因为s指向一个固定的内存区域。emmmmmm一直解释到这里都是有理有据没有问题的,事实上,还是报错了,报错原因和上面单独的一句是一样的【const char * 类型的值不能用于初始化 char * const 类型的实体】

        当然,我依然搜到了解决方案:

char * const s =(char*)str;

        (char *)str 会将 const char *转换为char * ,这样就可以将str的值赋予给s,这段代码能够正确执行,是因为s是一个常量指针,它所指向的内存区域是不能被改变的,但是str却是一个const指针,它本身也指向的是一个 const 内存区域。

思路梳理到这里的时候已经产生混乱了,也许是因为对指针的本质内涵不够透彻的了解,我对我原本确信的逻辑思路产生了怀疑,我又没办法把我的思路连贯起来了,我需要一个大佬再给我解释一下!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值