const关键字

c语言中,当const关键字修饰一般常量时,比较好理解变量的意义,就是说这个变量为常量,不能通过这个变量来操作对应的值。而当const修饰指针时,就比较难以理解,因为存在两种情况:指针本身为常量;另一个是指针指向的是一个常量。下面然我们来看一下这两种情况:

const char *p;		//p为指针变量,指向char型常量(指向的为常量)
char const *p;		//p为指针变量,指向char型常量,与上面等价
char *const p;		//p为常量指针,p本身不可改变,指向的是char型变量

一下是一段程序:

char *p4="abc";
const char *p1=p4;
char const *p2=p4;
char *const p3=p4;
*p1='q';		//错误,p1指向的是常量
*p2='w';		//错误,p2指向的是常量
*p3='4';
p1=p4;			//合法
p2=p4;			//合法
p3=p4;			//错误,p3是指针变量,本身不可改变

对于上面的例子我们可以做一个总结,如何更好的认识,当const修饰指针,指针到底是常量,还是指针指向的是常量?
关键在于,修饰指针p最近的一个*符号在哪,如果*与所修饰的变量中间有const,那么说明这个指针本身就是const类型,也就是常量指针。举个例子说明一下:
const char *p1; *与p1中间没有任何东西,说明p1是指针变量,指向常量.
char *const p3;*与p3中间有const修饰,说明p3是指针变量.

说明以上问题,我们使用上面的法则来看更复杂的例子:

//修饰p1最近的是*,因此p1是指针变量,指向的是(指向char型常量的指针)
char const **p1;
//同上
const char **p2;
//修饰p3最近的是*,因此p3是指针变量,指向的是(指向char型变量的常量指针)
char *const *p3;

因此:

char *p1;
const char **p2;
char *const *p3;
*p3=p1;	//报错
**p3='a';
*p2=p1;
**p2='s';	//报错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值