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

    文章

    7598

    浏览量

    136212
  • CONST
    +关注

    关注

    0

    文章

    44

    浏览量

    8151

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    C语言const关键字的用法

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

    C语言之正确使用Const

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

    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

    笔记本的布衫

    笔记本的布衫 在尽情地享受高科技数码产品给我们工作和生活带来的便利和乐趣的今天,你是否曾为你身躯娇小的PSP被刮伤而心疼好几天,你
    发表于 01-20 14:32 471次阅读

    请问C语言strcpy具体怎么使用

    标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str()、data()、copy(p,n)。这是C语言里面复制字符串的库函数, 函数声明包括在专
    发表于 11-29 08:54 1.1w次阅读

    C语言生成的段和CMD文件

    本章讲述COFF格式、C语言生成的段、CMD文件和复杂的.const段。
    发表于 04-12 16:37 11次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>生成的段和CMD文件

    C++与Cconst关键字有何差别?

    C++与C中的const关键字有何差别?
    的头像 发表于 02-03 14:51 1785次阅读

    C语言const和volatile的深度学习

    关于const的用法,现在大概前前后后应该写了有两篇文章,以前学习的时候,用法体会不是那么深刻,为啥这么说呢,因为在学习c++的时候,会发现const关键字有新的玩法,关于这个新的玩法,大家可以去看最近学习总结写的
    的头像 发表于 12-24 16:13 645次阅读

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

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

    C语言const的用法介绍

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

    C语言const关键字详解

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

    C语言|const关键字介绍

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