欢迎来到天天文库
浏览记录
ID:6776066
大小:37.50 KB
页数:12页
时间:2018-01-25
《情景分析“c语言的const关键字”》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、情景分析“C语言的const关键字”C语言中的const一直是C语言初学者心中的痛,这是因为const在不同位置有不同作用,在不同情景有不同角色。这让初学者摸不清头脑。今天,和大家一起研究一下const,让它的每个角色都“深入人心”!==============================================================================================情景一:最简单的const用法#includeintmain(){intconsta;a=5;printf("a=%d",a);return0;}如果编译
2、这个c文件,就会报错:1071.c:Infunction‘main’:1071.c:5:error:assignmentofread-onlyvariable‘a’显而易见,这是const在搞鬼,因为声明了const的变量是不能修改的!如果将源代码修改为如下这样,就没有问题了!#includeintmain(){intconsta=5;printf("a=%d",a);return0;}总结:const声明的变量必须要进行初始化赋值,如果错过这个机会,以后再想给const的变量赋值,可就没门了!切记~PS:intconst和constint是一回事,“颠倒写”都是可以的
3、。以后遇到了别犯晕,呵呵。但是,还是要留个心眼,当const和指针搀和到一起时,这个“颠倒写”的规律可未必成立。==============================================================================================情景二:发明const为了什么?在const诞生之前,开发者一直使用#defineVAR100来定义一些有特殊用途的类常量,不过这样定义是存在一些劣势的。因此const应运而生,之后开发者可以使用constintVAR=100;来定义类常量了。至于为什么#define有其劣势,还要读者自己去goo
4、gle下。:)==============================================================================================情景三:const和指针的配合是噩梦!你能分辨得清这些声明么:constint*A;intconst*A;int*constA;constint*constA;如果有点犯晕的话,那就先给出它们的讲解,然后继续看后面的情景分析吧。constint*A;//修饰指向的对象,A可变,A指向的对象不可变intconst*A; //修饰指向的对象,A可变,A指向的对象不可变int*constA; //修
5、饰指针A,A不可变,A指向的对象可变constint*constA;//指针A和A指向的对象都不可变==============================================================================================情景四:constint*A[rocrocket@wupengchongconst_test]$cattest1.c#includeintmain(){intnum=12;constint*A=#printf("result=%d",*A);return0;}编译执行结果为:[r
6、ocrocket@wupengchongconst_test]$cctest1.c[rocrocket@wupengchongconst_test]$./a.outresult=12接下来,我们动动手脚,在代码中加入了(*A)++;这条语句:[rocrocket@wupengchongconst_test]$cattest1.c#includeintmain(){intnum=12;constint*A=#(*A)++;printf("result=%d",*A);return0;}编译这个c文件:[rocrocket@wupengchongconst_test
7、]$!cccctest1.ctest1.c:Infunction‘main’:test1.c:6:error:incrementofread-onlylocation‘*A’可以看到,报错了,报错的内容表示”*A”是只读的,不能修改。我们再修改一下源代码为下面这样:[rocrocket@wupengchongconst_test]$cattest1.c#includeintmain(){in
此文档下载收益归作者所有