C语言关键字之const

const关键字是嵌入式程序员必须熟悉的。因为它的使用可以增加程序的健壮性,并且使读者更好地理解程序。
它所修饰的变量被叫做“只读变量”。注意“只读变量”!=“常量”。千万不要说被const所修饰的变量就是常量!那只能说明你对const还不太理解!下面就让我们来分析一下const。
首先看以下定义:
const int a = 3;
int const a = 3;
const char b = '1';
char const b = '1';
const char s[] = "123456789";
char const s[] = "123456789";
这里const的位置对变量没有影响。有了const的修饰,以上的变量就表示只读的,如果在编译过程中想要改变以上变量的内容,那么编译器就会报错。知道了这点,我希望以后大家在写程序时在能加const的地方都加上,这样你的程序会更加完美的!
在我的经验里,经常在函数的参数里加const,就是说明这个参数是只读的。例如我定义以下函数(功能是求字符串长度):
int Strlen(const char *s);
显然传入的参数s的内容是不能被改变的,因为一旦被改变,长度就可能返回一个错误值。加上const就非常有效地避免了这一点!
这里还有一个问题,如果我把以上函数这样定义对不对呢:
int Strlen(char* const s);
答案是:不对!!!可能有人就要问为什么不对啊?const的位置对变量没有影响啊!我要说的是const的位置对普通变量是没有影响,但是对指针变量有着严重的影响!!下面让我们来分析一下这种影响:
const char *s1 = "11111";     (1)
char const *s2 = "22222";     (2)
char* const s3 = "33333";     (3)
分析指针变量时,我们关键要看const后面的内容。
(1)式const后面是*s1,即它修饰了*s1的内容,也就是说s1指针所指的内容是不可以被改变的!!但是s1本身可以被改变。举个例子大家就清楚了:
const char *s1 = "11111";
char *p = "aaaaa";
s1[1] = '2';(这里会编译错误)
s1 = p;(这里编译正确)
s1[1] = '3';(这里也编译错误)
即s1所存的地址是可以改变的,但是该地址指向的内容是不能改变的!
(2)式和(1)式是一样用法的。因为const后面都是*s2,*s1.
但是(3)式就不一样了,因为const后面是s3, s3也是一个指针,但是const修饰的是s3,不是*s3,所以它是内容可以变,但是s3本身不能变!即s3指向的地址不可以被改变,但是内容可以变。这正好与上面的两个式子意义相反。
ok,到这里const大家应该就会用了吧?记住,const修饰指针时一定要注意const修饰的是什么!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lllanlovehua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值