C语言中不是指针常量的是,关于C语言中常量指针和指针常量的一点理解

指针常量和常量指针是两个很容易混淆的概念,在此加以区分。

1)概念

char* const p1; //指针常量

const char* p2;  //常量指针

可以这样方便记忆两个概念,按照次序读,char*const ——(指针常量);constchar*—— (常量指针)。

2)理解

具体来看,指的是const之后的东西不能变,因而,char* const p1;——p1不能改变,也就是p1只能在初始化是指向一个特定地址,之后就不能修改,也即p1的值只能初始化一次。而const    char* p2; 则是说*p2的值不能变,也就是p2指向空间的值不能改变。

3)看一个例子

#include

using namespace std;

void main()

{

char* const p1 = "abc"; //指针常量

const char* p2 = "bcd"; //常量指针

p1 = "kkk"; //编译无法通过,不能修改p1的值

p2 = "kkk"; //编译可以通过,可以运行,可以修改p2的值,不能修改*p2的值

*p1 = 'c'; //编译可以通过但是不能运行

*p2 = 'a'; //编译无法通过,无法修改p2指向空间的值

}

在此需要特别说明一下*p1=‘c’可以编译通过,但是无法运行的原因: 先不要纠结const char* 与char* const的问题,一个变量前面有再多修饰符都只是在修饰变量。 一个普通的字符串编译器按照常量处理,这个常量字符数组放在内存中的只读区域(也就是代码段),通过p1或p2指针向只读存储区写数据会引起Segment Fault,无法运行。

而如果这样 ,则是可以的。

char a[]="nice day";

char* const p=a;

a[1]='w';

*pc = 'k';

cout<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值