情景分析“c语言的const关键字”

情景分析“c语言的const关键字”

ID:6608290

大小:37.50 KB

页数:12页

时间:2018-01-20

情景分析“c语言的const关键字”_第1页
情景分析“c语言的const关键字”_第2页
情景分析“c语言的const关键字”_第3页
情景分析“c语言的const关键字”_第4页
情景分析“c语言的const关键字”_第5页
资源描述:

《情景分析“c语言的const关键字”》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、情景分析“C语言的const关键字”C语言中的const一直是C语言初学者心中的痛,这是因为const在不同位置有不同作用,在不同情景有不同角色。这让初学者摸不清头脑。今天,和大家一起研究一下const,让它的每个角色都“深入人心”!==============================================================================================情景一:最简单的const用法#includeintmain(){intconsta;a=5;print

2、f("a=%d",a);return0;}如果编译这个c文件,就会报错:1071.c:Infunction‘main’:1071.c:5:error:assignmentofread-onlyvariable‘a’显而易见,这是const在搞鬼,因为声明了const的变量是不能修改的!如果将源代码修改为如下这样,就没有问题了!#includeintmain(){intconsta=5;printf("a=%d",a);return0;}总结:const声明的变量必须要进行初始化赋值,如果错过这个机会,以后再想给c

3、onst的变量赋值,可就没门了!切记~PS:intconst和constint是一回事,“颠倒写”都是可以的。以后遇到了别犯晕,呵呵。但是,还是要留个心眼,当const和指针搀和到一起时,这个“颠倒写”的规律可未必成立。==============================================================================================情景二:发明const为了什么?在const诞生之前,开发者一直使用#defineVAR100来定义一些有特殊用途的类常量,不过这样定义

4、是存在一些劣势的。因此const应运而生,之后开发者可以使用constintVAR=100;来定义类常量了。至于为什么#define有其劣势,还要读者自己去google下。:)==============================================================================================情景三:const和指针的配合是噩梦!你能分辨得清这些声明么:constint*A;intconst*A;int*constA;constint*constA;如果有点犯晕的话,那

5、就先给出它们的讲解,然后继续看后面的情景分析吧。constint*A;//修饰指向的对象,A可变,A指向的对象不可变intconst*A; //修饰指向的对象,A可变,A指向的对象不可变int*constA; //修饰指针A,A不可变,A指向的对象可变constint*constA;//指针A和A指向的对象都不可变==============================================================================================情景四:constint*A[rocro

6、cket@wupengchongconst_test]$cattest1.c#includeintmain(){intnum=12;constint*A=#printf("result=%d",*A);return0;}编译执行结果为:[rocrocket@wupengchongconst_test]$cctest1.c[rocrocket@wupengchongconst_test]$./a.outresult=12接下来,我们动动手脚,在代码中加入了(*A)++;这条语句:[rocrocket@wupen

7、gchongconst_test]$cattest1.c#includeintmain(){intnum=12;constint*A=#(*A)++;printf("result=%d",*A);return0;}编译这个c文件:[rocrocket@wupengchongconst_test]$!cccctest1.ctest1.c:Infunction‘main’:test1.c:6:error:incrementofread-onlylocation‘*A’可以看到,报错了,报错的内容表示”*A”是只读

8、的,不能修改。我们再修改一下源代码为下面这样:[rocrocket@wupengchongconst_test]$cattest1.c#includeintmain(){in

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。