理解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]