《c语言中const的用法.docx》由会员分享,可在线阅读,更多相关《c语言中const的用法.docx(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、c语言中const的用法C语言作为一门新型高级编程语言,在计算机软件编程中具有较为广泛的应用和实现。下面我就跟你们具体介绍下c语言中const的用法,希望对你们有用。c语言中const的用法如下:const的基本解释const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上能够提高程序的强健性,另外,在观看别人代码的时候,明晰理解const所起的作用,对理解对方的程序也有一些帮助。固然这听起来很简单,但实际上,const的使用也是c语言中一个比拟微妙的地方,微妙在何处呢?请看下面几个问题。问题:const变量常量为什么我象下面的例子一样用一个const变量来初始化数
2、组,ANSIC的编译器会报告一个错误呢?constintn=5;intan;答案与分析:1、这个问题讨论的是常量与只读变量的区别。常量肯定是只读的,例如5,abc,等,肯定是只读的,由于程序中根本没有地方存放它的值,当然也就不能够去修改它。而只读变量则是在内存中开拓一个地方来存放它的值,只不过这个值由编译器限定不允许被修改。C语言关键字const就是用来限定一个变量不允许被改变的修饰符Qualifier。上述代码中变量n被修饰为只读变量,可惜再怎么修饰也不是常量。而ANSIC规定数组定义时维度必须是常量,只读变量也是不能够的。2)、注意:在ANSIC中,这种写法是错误的,由于数组的大小应该是个
3、常量,而constintn,n只是一个变量常量!=不可变的变量,但在标准C+中,这样定义的是一个常量,这种写法是对的,实际上,根据编译经过及内存分配来看,这种用法本来就应该是合理的,只是ANSIC对数组的规定限制了它。3)、那么,在ANSIC语言中用什么来定义常量呢?答案是enum类型和#define宏,这两个都能够用来定义常量。问题:const变量const限定的内容下面的代码编译器会报一个错误,请问,哪一个语句是错误的呢?typedefchar*pStr;charstring4=abcconstchar*p1=string;constpStrp2=string;p1+;p2+;答案与分析:
4、问题出在p2+上。1)、const使用的基本形式:constcharm;限定m不可变。2)、替换1式中的m,constchar*pm;限定*pm不可变,当然pm是可变的,因而问题中p1+是对的。3)、替换1式char,constnewTypem;限定m不可变,问题中的charptr就是一种新类型,因而问题中p2不可变,p2+是错误的。问题:const变量字符串常量请问下面的代码有什么问题?char*p=imhungry!p0=I答案与分析:上面的代码可能会造成内存的非法写操作。分析如下,imhungry本质上是字符串常量,而常量往往被编译器放在只读的内存区,不可写。p初始指向这个只读的内存区,
5、而p0=I则企图去写这个地方,编译器当然不会答应。问题:const变量字符串常量2请问chara3=abc合法吗?使用它有什么隐患?答案与分析:在标准C中这是合法的,但是它的生存环境非常狭小;它定义一个大小为3的数组,初始化为abc。注意,它没有通常的字符串终止符0,因而这个数组只是看起来像C语言中的字符串,本质上却不是,因而所有对字符串进行处理的函数,比方strcpy、printf等,都不能够被使用在这个假字符串上。问题5:const指针类型声明中const用来修饰一个常量,有如下两种写法,那么,请问,下面分别用const限定不可变的内容是什么?1)、const在前面constintnVal
6、ue;/nValue是constconstchar*pContent;/*pContent是const,pContent可变const(char*)pContent;/pContent是const,*pContent可变char*constpContent;/pContent是const,*pContent可变constchar*constpContent;/pContent和*pContent都是const2)、const在后面,与上面的声明对等intconstnValue;/nValue是constcharconst*pContent;/*pContent是const,pContent可变
7、 (char*)constpContent;/pContent是const,*pContent可变char*constpContent;/pContent是const,*pContent可变charconst*constpContent;/pContent和*pContent都是const答案与分析:const和指针一起使用是C语言中一个很常见的困惑之处,在实际开发中,十分是在看别人代码的时候,经常会由于这样而不好判定作者的意图,下面讲一下我的判定原则:沿着*号划一条线,假如const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;假如const位于*的右侧,cons
8、t就是修饰指针本身,即指针本身是常量。你能够根据这个规则来看上面声明的实际意义,相信定会一目了然。另外,需要注意:对于const(char*);由于char*是一个整体,相当于一个类型(如char),因而,这是限定指针是const。另const用于函数时出现三个位置:例如:constreturnValfunction(constlist_array)const;第一个const意思是:返回值是常量第二个const意思是:函数经过中不能修改list_array的值第三个const意思是:函数经过不能隐式的修改function参数的值zzpublishblog.blogchina/blog/tb.
9、b?diaryID=3217823constchar*,charconst*,char*const的区别问题几乎是C+面试中每次都会有的题目。Bjarne在他的TheC+ProgrammingLanguage里面给出过一个助记的方法:把一个声明从右向左读。char*constcp;(*读成pointerto):cpisaconstpointertocharconstchar*p;:pisapointertoconstchar;charconst*p;同上由于C+里面没有const*的运算符,所以const只能属于前面的类型。另:下面定义的一个指向字符串的常量指针:char*constprt1=
10、stringprt1;其中,ptr1是一个常量指针。因而,下面赋值是非法的。ptr1=stringprt2;而下面的赋值是合法的:*ptr1=m由于指针ptr1所指向的变量是能够更新的,不可更新的是常量指针ptr1所指的方向(别的字符串)。下面定义了一个指向字符串常量的指针:const*ptr2=stringprt1;其中,ptr2是一个指向字符串常量的指针。ptr2所指向的字符串不能更新的,而ptr2是能够更新的。因而,*ptr2=x是非法的,而:ptr2=stringptr2;是合法的。所以,在使用const修饰指针时,应该注意const的位置。定义一个指向字符串的指针常量和定义一个指向字符串常量的指针时,const修饰符的位置不同,前者const放在*和指针名之间,后者const放在类型讲明符前。