C语言const的用法详解,C语言常量定义详解

文章推薦指數: 80 %
投票人數:10人

当一个指针变量str1 被const 限制时,并且类似 const char *str1 这种形式,说明指针指向的数据不能被修改;如果将str1 赋值给另外一个未被const 修饰的指针变量str2,就有 ... 首页 教程 VIP会员 一对一答疑 辅导班 公众号 首页 C语言教程 C++教程 Python教程 Java教程 Linux入门 更多>> 目录 C语言入门 1 编程基础 2 C语言初探 3 变量和数据类型 4 C语言输入输出 5 循环结构和选择结构 6 C语言数组 7 C语言函数 8 预处理命令 9 指针 10 结构体 11重要知识点补充11.1typedef的用法11.2const的用法11.3C语言随机数 12 文件操作 13 C语言调试 14 C语言内存精讲 15 头文件的编写 首页>C语言入门>重要知识点补充 阅读:129,885 C语言const的用法详解,C语言常量定义详解   有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定。

例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小。

为了满足这一要求,可以使用const关键字对变量加以限定: constintMaxNum=100;//班级的最大人数 这样MaxNum的值就不能被修改了,任何对MaxNum赋值的行为都将引发错误: MaxNum=90;//错误,试图向const变量写入数据 我们经常将const变量称为常量(Constant)。

创建常量的格式通常为: consttypename=value; const和type都是用来修饰变量的,它们的位置可以互换,也就是将type放在const前面: typeconstname=value; 但我们通常采用第一种方式,不采用第二种方式。

另外建议将常量名的首字母大写,以提醒程序员这是个常量。

由于常量一旦被创建后其值就不能再改变,所以常量必须在定义的同时赋值(初始化),后面的任何赋值行为都将引发错误。

一如既往,初始化常量可以使用任意形式的表达式,如下所示: #include intgetNum(){ return100; } intmain(){ intn=90; constintMaxNum1=getNum();//运行时初始化 constintMaxNum2=n;//运行时初始化 constintMaxNum3=80;//编译时初始化 printf("%d,%d,%d\n",MaxNum1,MaxNum2,MaxNum3); return0; } 运行结果: 100,90,80 const和指针 const也可以和指针变量一起使用,这样可以限制指针变量本身,也可以限制指针指向的数据。

const和指针一起使用会有几种不同的顺序,如下所示: constint*p1; intconst*p2; int*constp3; 在最后一种情况下,指针是只读的,也就是p3本身的值不能被修改;在前面两种情况下,指针所指向的数据是只读的,也就是p1、p2本身的值可以修改(指向不同的数据),但它们指向的数据不能被修改。

当然,指针本身和它指向的数据都有可能是只读的,下面的两种写法能够做到这一点: constint*constp4; intconst*constp5; const和指针结合的写法多少有点让初学者摸不着头脑,大家可以这样来记忆:const离变量名近就是用来修饰指针变量的,离变量名远就是用来修饰指针指向的数据,如果近的和远的都有,那么就同时修饰指针变量以及它指向的数据。

const和函数形参 在C语言中,单独定义const变量没有明显的优势,完全可以使用#define命令代替。

const通常用在函数形参中,如果形参是一个指针,为了防止在函数内部修改指针指向的数据,就可以用const来限制。

在C语言标准库中,有很多函数的形参都被const限制了,下面是部分函数的原型: size_tstrlen(constchar*str); intstrcmp(constchar*str1,constchar*str2); char*strcat(char*destination,constchar*source); char*strcpy(char*destination,constchar*source); intsystem(constchar*command); intputs(constchar*str); intprintf(constchar*format,...); 我们自己在定义函数时也可以使用const对形参加以限制,例如查找字符串中某个字符出现的次数: #include size_tstrnchr(constchar*str,charch){ inti,n=0,len=strlen(str); for(i=0;i voidfunc(char*str){} intmain(){ constchar*str1="c.biancheng.net"; char*str2=str1; func(str1); return0; } 第7、8行代码分别通过赋值、传参(传参的本质也是赋值)将const类型的数据交给了非const类型的变量,编译器不会容忍这种行为,会给出警告,甚至直接报错。

关注公众号「站长严长生」,在手机上阅读所有教程,随时随地都能学习。

本公众号由站长亲自运营,长期更新,坚持原创,持续分享创业故事+学习历程+工作记录+生活日常+编程资料。

微信扫码关注公众号   优秀文章 Linuxmkdir命令:创建目录(文件夹) Shell常用运算符 C++模板的显式实例化 汇编语言操作数类型 Go语言变量的生命周期 C语言frexp()函数:提取浮点数的尾数和指数部分 JSPRequest.getRequestedSessionId()方法:获得客户端访问网站的sessionid值 PHPclone关键字(克隆对象) 并发和并行的区别(图解) JS标准有哪些? 精美而实用的网站,分享优质编程教程,帮助有志青年。

千锤百炼,只为大作;精益求精,处处斟酌;这种教程,看一眼就倾心。

关于网站| 关于站长| 如何完成一部教程| 公众号| 联系我们| 网站地图 Copyright©2012-2022biancheng.net,冀ICP备2022013920号 ↑



請為這篇文章評分?