Chinaunix首页 | 论坛 | 博客
  • 博客访问: 728308
  • 博文数量: 134
  • 博客积分: 3207
  • 博客等级: 中校
  • 技术积分: 1995
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-01 20:47
文章分类

全部博文(134)

文章存档

2022年(1)

2020年(7)

2018年(2)

2016年(5)

2015年(14)

2014年(21)

2013年(3)

2012年(1)

2011年(15)

2010年(30)

2009年(35)

分类: LINUX

2009-10-17 18:32:34

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修饰的是什么!
阅读(865) | 评论(0) | 转发(0) |
0

上一篇:printf之栈问题

下一篇:原码,反码和补码

给主人留下些什么吧!~~