0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言里的铁布衫——const

Q4MP_gh_c472c21 来源:未知 作者:胡薇 2018-06-11 16:26 次阅读

相传在C的世界里出现了一件极品装备(铁布衫)const、它的出现,让天下的所有刺客和黑客都闻风丧胆,在它的保护下,所有的变量都可以保存的完好无损const是constant的缩写,表示海枯石烂、恒定不变、一旦相伴、永不变心。只要一个变量前面用const来修饰,就意味着该变量的数据可以被访问,不能被修改。其实我们还可以叫它readonly.

虽然理解起const来相对比较容易理解,但是const不仅仅可以用来修辞基本类型,它还可以经常用来修辞一些构造类型和指针及其参合体,如数组、指针、指针数组、结构体数组、结构体指针数组一旦和这些复杂的类型结合起来还是有一定的迷惑性的.

例如:

(1) const int a = 10;

(2) int const a = 10;

(3) const int a[10] = {1,2,3, 4, 5, 6, 7, 8, 9, 10};

(4) const int *p;

(5) int * const p;

(6) const struct devices dev[5];

(7) struct devices const * dev[5];

看到上面的例子,我相信很多人都会倒吸一口冷气。话不多说直接看辨识技巧

将类型去掉;

看const修饰谁,谁就拥有铁布衫,谁的值就不能被修改,是readonly(1)去掉类型 int 变成“const a = 10”,a 拥有了铁布衫,a的值是不变的(2)去掉类型 int 变成“const a = 10”,a 拥有了铁布衫,a的值是不变的,这两个的效果一样(3)去掉类型 int 变成“const a[10]”, a[10]拥有了铁布衫,a数组里面的值是不变的(4)去掉类型 int 变成“const *p”,*p拥有铁布衫,p所指的空间里面的值是不变的(5) 去掉类型 int * 变成 “const p”,指针变量p拥有了铁布衫,指针变量p的值不变,也就是说p不能再指向其他地址了,但是p所指向的空间的值可变(6)去掉类型struct devices变成“const dev[5]”,dev[5]拥有了铁布衫,dev[5]数组的值不变(7)这是一个devices结构体类型的指针数组,它拥有5个devices结构体类型的指针,每个指针指向一个devices结构体,const修饰*dev[5],去掉类型struct devices变成“const *dev[5]”,指针数组*dev[5]拥有了铁布衫,指针数组dev中每个元素指向的空间里的值不变。

作用总结:

首先、const关键字修饰变量名的时候,把这个变量变为是一个只读变量,这里的只读不是全局数据区的or段。它所修饰的变量原来是在哪个区域,const修饰之后它还在那个区域。比如修饰一个局部变量const int num = 5;那么这个局部变量还是存在栈空间上。它本身对应的内存空间还是可以变的。但是不可以通过num去修改它。如果定义一个指针指向num的地址。则可以改变num的值。其次、const可以修饰形参(保护形参不被修改),在这一点上,站在实现者的角度,const可以防止函数对实参修改带来的问题。站在调用者的角度来说,它对于实参只能访问,不能修改。所以、合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7513

    浏览量

    124373
  • CONST
    +关注

    关注

    0

    文章

    43

    浏览量

    7944

原文标题:在C的世界里出现了一件极品装备(铁布衫)const

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言关键字const的几种用法

    本期来讲解一个C语言的关键字——const
    发表于 06-21 11:05 950次阅读
    C<b class='flag-5'>语言</b>关键字<b class='flag-5'>const</b>的几种用法

    C语言const关键字的用法

    const是constant的简写,用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变。
    发表于 06-29 09:51 329次阅读

    C语言之正确使用Const

    C语言之正确使用Const基本解释  const是一个C语言的关键字,它限定一个变量不允许被改变
    发表于 10-07 11:20

    CC++中const的用法比较

    buf[bufsize];尽管看起来符合我们的思维习惯,但编译将出现错误。因为bufsize占有存储空间,C编译器在编译期间不能确定它的值。因此在C语言中,const并不是非常有用的
    发表于 11-11 10:00

    C语言——正确使用const

    C语言——正确使用const基本解释   const是一个C语言的关键字,它限定一个变量不允许被
    发表于 04-23 11:58

    C语言布衫——const

    相传在C的世界出现了一件极品装备(布衫const、它的出现,让天下的所有刺客和黑客都闻风丧胆,在它的保护下,所有的变量都可以保存的完好
    发表于 06-11 08:28

    【每日一知识点】C语言const详解

    本帖最后由 张飞电子学院蔡琰 于 2021-3-29 11:01 编辑 C语言const关键字是constant的缩写,是恒定不变的意思。通常翻译为常量、常数等,我们一看到const
    发表于 03-29 10:53

    单片机中const是什么意思?

    在单片机C语言const unsigned char ov529[5]={0xff,0xff,0xff,SYNC_ID,0x00}前面加const是什么意思??表示常量,不允许修改里
    发表于 07-15 08:52

    C语言中的数据类型有哪几种?const有哪些用法?

    C语言中的数据类型有哪几种?const有哪些用法?作用域与static用法是什么?extern是如何去使用的?
    发表于 07-22 06:51

    单片机的C语言里面,有个修饰词const,这个词放到变量类型前和后有什么区别吗?

    单片机的C语言里面。有个修饰词const,这个词放到变量类型前和后有什么区别吗?我看到有网友发的两个贴有这两个用法,不太懂
    发表于 06-20 08:24

    C语言类型修饰符Const的教程使用说明

    Const也是应该广泛的关键字,表示后面定义有可能是一个不变的常量,但是跟各种数据类型定义组合,能演变出复杂含义。常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新
    的头像 发表于 09-20 09:37 2797次阅读

    const在C语言与C++中的区别与使用!

    const修饰的全局变量不能以地址的形式进行修改,由于它在内存中位于常量区,他的地址空间是只读的。在C语言中被const的变量是直接被分配内存的。
    的头像 发表于 04-24 16:08 1150次阅读

    C语言const的用法介绍

    C语言标准库中很多函数的参数都被 const 限制了,但我们在以前的编码过程中并没有注意这个问题,经常将非 const 类型的数据传递给 const 类型的形参,这样做从未引发任何副作
    发表于 01-05 10:03 402次阅读

    C语言const关键字详解

    const我平时没咋用过,最近在一份代码中配置外设寄存器值的数组定义上看到用了这个,因此进行一下简单的入门学习。在本文最后1点给出const在配置外设初始默认寄存器的用法。
    的头像 发表于 04-15 15:47 423次阅读

    C语言|const关键字介绍

    最近看别人的项目, 发现const使用比较多, 通过使用const来保护变量, 这篇推文就来简单回顾一下相关知识!
    的头像 发表于 05-25 15:11 334次阅读