博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

kernel

  zhoubaozhou.cublog.cn

关于作者
姓名:周宝舟
职业:学生
位置:电子科大
|| << >> ||
我的分类


理解const
理解const
 
首先,为什么const。
一个很简单的例子,如何有人传给你一堆数据,要你根据数据返回一个处理的结果,比如做CRC校验。
unsigned int do_crc(void *buf, int len);
你做完之后,只要告诉他CRC是对还是错就可以了。
但是,如果buf里的数据经过几次处理后,发现给改动了,但是又不知道是谁改动的,问题就出现了,你有口无凭。
 
但是,只要做个小小的改动:
unsigned int do_crc(const void *buf, int len);
这样就没可能是你的错了。
 
很显然,const的功能就在于此。
 
const可以用于以下情况:
一,数据不能改动。
二,指针不能改动。
 
如:
const char *p = "test";
那么p指向的数据就不能改动了,编译器会阻止你去做(当然,数据是放在数据段里的,如果你用汇编的话,是可以改动的,但是那样就没有意义了)
 
如果是
char * const p = "test";
那么,p就只能指向"test"了。
 
但是,很多时候,往往弄不清,什么时候是数据不能改动,什么时候是指针不能改动。
 
一个很简单的方法:
如果是const xxx
则xxx不能改动
如:
const int a;
则int a不能改动。
当然,int const a是等效的。
 
如果是
int * const a;
则a不能改动,就是a只能指向固定的地方。
但是*a还是可以改动。
 
这样理解这简单多了。
语言在实现时也应该是如此考虑的吧。
 
 
[周宝舟 zhoubaozhou.cublog.cn]
 

发表于: 2008-07-09,修改于: 2008-07-09 17:08,已浏览70次,有评论0条 推荐 投诉


网友评论
 发表评论