C语言之const用法

C语言之const用法

ID:37726764

大小:40.00 KB

页数:9页

时间:2019-05-29

C语言之const用法_第1页
C语言之const用法_第2页
C语言之const用法_第3页
C语言之const用法_第4页
C语言之const用法_第5页
资源描述:

《C语言之const用法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C语言之const与static详解看到const关键字,很多人想到的可能是const常量,其实关键字const并不能把变量变成常量!在一个符号前加上const限定符只是表示这个符号不能被赋值。也就是它的值对于这个符号来说是只读的,但它并不能防止通过程序的内部(甚至是外部)的方法来修改这个值(C专家编程.p21)。也就是说const变量是只读变量,既然是变量那么就可以取得其地址,然后修改其值。看来const也是防君子不防小人啊!:)const使用情况分类详析1、const的普通用法constintn=10;意思很明显,n是一个只读变量

2、,程序不可以直接修改其值。这里还有一个问题需要注意,即如下使用:inta[n];在ANSIC中,这种写法是错误的,因为数组的大小应该是个常量,而n只是一个变量。2、const用于指针constint*p;intconst*p;int*constp;在最后的一种情况下,指针是只读的(即p只读),而在另外两种情况下,指针所指向的对象是只读的(即*p只读)。const是一个左结合的类型修饰符,它与其左侧的类型修饰符一起为一个类型修饰符,所以,intconst限定*p,不限定p。int*const限定p,不限定*p。这里有一个简便的区分方法:

3、沿着*号划一条线,如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。3、const用于函数的地址传递参数voidfoo(constint*p)这种形式通常用于在数组形式的参数中模拟传值调用。也就是相当于函数调用者声称:"我给你一个指向它的指针,但你不能去修改它。"如果函数编写者遵循了这个约定,那么就相当于模拟了值传递。这也是const最有用之处了:用来限定函数的形参,这样该函数将不会修改实参指针所指的数据。这里注意了,是函数

4、不应该去修改而不是不能修改,也就是说const不能阻止参数的修改(原因见上)。4、const用于限定函数的返回值constintfoo();conststructmytypefoo();上述写法限定函数的返回值不可被更新,当函数返回内部的类型时,已经是一个数值,当然不可被赋值更新,所以,此时const无意义,最好去掉,以免困惑。当函数返回自定义的类型时,这个类型仍然包含可以被赋值的变量成员,所以,此时有意义。一、宏定义:主要是一些语法问题和技巧例如:#defineFIND(s,e)(size_t)&(((structs*)(0))->

5、e)//求结构体内的变量相对于结构体的偏移量#defineSECONDS_PER_YEAR(360*24*60*60)UL//求一年中的秒数#defineMIN(a,b)(((a)<=(b))?(a):(b))//求最小值说明:尽可能考虑移植性,由于代码可能在16位机,也有可能在32位机器上运行,所以采用size_t和UL都是基于移植性的考虑。二、const用法:定义常量,修饰指针、函数的输入参数和返回值,简单说const表示只读的意思,本质上来说它只是在全局数据段或者栈中定义的是一个只读的常量,不是真正位于字符串常量区。Const的

6、目的是为了产生高质量的代码,提高代码的可读性,同时保护好不能被任意改变的内存,从而降低Bug产生的概率。   constinta=10;constintb;//错误,常量必须初始化   inta=10,b=9;   constint*p1=&a;//指针指向的内容只读,不能通过该指针去写   *p1=11;//错误   int*constp2=&a;//指针本身只读,指针初始化到一个对象后,将不能被修改p2=&b;//错误constint*p3const=&a;//指针本身和指向的内容都是只读 constchar*fp1(void)/

7、/修饰返回值,表示返回的指针指向内容只读{   char*p="dddd";   returnp;}voidfp1(constchar*str){   *str=4;//错误   constchar*p=str;//p必须为const,才能接受str}int_tmain(intargc,_TCHAR*argv[]){   constchar*d=fp1();   printf("%s",d);} 三、extern用法:在别的文件中定义的变量,要想在本文件中使用,必须先用extern声明,例如:externa;之后就当成在本文件中定义的

8、变量一样使用。 四、static用法:1.修饰变量,从生存域和访问域两个方面说明,无论static变量定义在函数内或外,该变量都位于数据段中;定义于函数体外的static变量的访问域仅仅是它所在文件中定义的函数,其他文件

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

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

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