C的关键字——const的理解和用法
2008-02-23 05:26:14来源:互联网 阅读 ()
进入原贴讨论:http://www.bc-cn.net/bbs/dispbbs.asp?BoardID=5&ID=66030
关于C的关键字——const的理解和用法
const在C中的用法很灵活(相信C 中也相同),个人感觉对之既爱又恨,有时候感觉const很好用,同时又经
常会因为他的长处而犯错,犯错的原因除了粗心之外,另一个更重要的,就是以前对const理解不到位。于是今天
自己写成一篇小总结。假如是初学者,建议好好看一下,相信帮助比较大;假如是高手,请不吝赐教!
上面写了一段废话,就算是小序吧:)接下来就是正文;
一、关于const的具体定义:
——个人感觉很难对他下一个标准的定义,因为的用法很灵活,似乎对他定义后总无法让人能够明白他的
意思,而且容易让人产生误解(也许是偶水平太菜了)。例如,把他有定义:一个能够让变量变成无法修改的常量
的关键字。那么,这样的话,就可能让人误解为只要有const在定义变量里面,那变量就无论怎样都无法修改。这
样的理解是很片面的(下面用法方面将对这问题做探讨)。因此,本人在此不敢对他下定义,其他参考书好象也没
有下定义。
二、关于const的具体作用
——const作用就灵活了,一个表达式中const放置的位置不同,效果可能就不相同了。下面分具体情况分
析(当然,所举的情况并非覆盖全部情况)
A。const最经常的用法
1.为了防止传递的函数参数不被修改,在调用函数的形参中用const关键字.
//Example ->
int FindNum(const int array[], int num, int conut);//声明函数
//code...
int FindNum(const int array[], int num, int count)
{
int i;
int flag = 1;
for (i = 0; (i < count) && flag; i )
{
if (array[i] == num)
{
flag = 0;
break;
}
}
return flag;
}
//code...
上面这例子中,编译器会把array[]当作常量数据的数组看待。所以,假如您不小心给数组赋值,那么
,编译器就会报错了。因此,当您无需也不想修改数组的数据时,最好用const把数组定义为常量数组。
2.const能够用来创建数组常量、指针常量、指向常量的指针等:
const char ch = 'a';
const int a[5] = {1, 2, 3, 4, 5};
const int *p = a; //a是个数组的首地址.p是指向常量的指针
int * const p = a; //a是个数组的首地址.p是指针常量;
const int * const p = a; //a是个数组的首地址。p是指向常量的指针常量
前两种情况很简单,现在着重分析一下后三种用法,因为这3种情况容易出错,偶就有时候怕用错了
刚脆不用const.
——const int *p = a; //p是指向常量的指针,因此,不能够通过给指针赋值来改变数组
//中的数据,例如:
// *p = 10; /*错误*/
// *(p 2) = 1; /*错误*/
//假如指向常量指针能够改变值,那么,就等于也改变了数组的数
//据了。假如您不理解,偶倒有一个办法让您理解,您就想您和一
//个人绑在一起,有可能您移动了位置而他不跟着您移动吗!哈哈
——int * const p = a; //看这表达式,const的位置和第一个不同吧!他们的用法和作用
//就完全不相同了。这时候p是指针常量,我们知道,指针是指向
//了一个数组的首地址,那么,他的位置就不能够改变了。但是您
//现在应该和第一个表达式比较了,现在的数组并不是常量数组,
//所以数组的数据是能够改变的,而指针这时候他是不能够移动的
//,指向数组第一个数据,所以他能够而且只能够改变数组第一个
//数据的值。这一点请别误解,指针常量只是他的地址不能够改变
//,并不是他指向的内容一定不能够改变,这一点切记!
//好啦。假如您又不理解,偶又有一个比较形象的例子来说明:
//假如有一个固定的人拉着另外一个人的手,注意,固定的人相当
//于他是不能够由其他人来替换的。但是他能够拉其他人的手啊,
//并不一定规定他必须拉同一个人的手啊。现在您应该能够有个比
//较深的印象和理解吧:P
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 链表的C语言实现之循环链表及双向链表
下一篇: 绝对能够测试您的C语言功力的几个问题
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash