C语言关键字 - 铁布衫:const 转载
const
描述:相传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. const修辞*p,去掉类型int变成:const *p,*p 拥有了铁布衫(下图中空间2),p所指向的空间里的值不变。
5. const修辞p,去掉类型int*变成:const p,指针变量p拥有了铁布衫(下图中空间1),指针变量p里的值不变,也就是说p不能再指向其它地址,但是p所指向的空间里的值可变,如图xxx所示。
图xxx 指针变量与指针变量所指向的空间示意图
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中每个元素指向的空间里的值不变。
C语言关键字 - 铁布衫:const 转载的更多相关文章
- 1.C语言关键字(auto break case char const swtich)
ANSI C标准C语言共有32个关键字,分别为: auto break case char const continue default do double else enum extern floa ...
- C语言学习笔记--const 和 volatile关键字
1.const关键字 (1)const 修饰的变量是只读的,它不是真正的常量,本质还是变量,只是告诉编译器不能出现在赋值号左边! (2)const 修饰的局部变量在栈上分配空间 (3)const 修饰 ...
- FILE不是C语言关键字
FILE不是C语言关键字,只是标准C中的标准输入输出中定义的一个新的数据类型 stdio.htypedef struct _iobuf{ char* _ptr; int _cnt; char* _ba ...
- 李洪强漫谈iOS开发[C语言-009] - C语言关键字
// // main.m // 04 - C语言关键字 // // Created by vic fan on 16/7/12. // Copyright © 2016年 李洪强. All r ...
- c语言关键字总结
1.关键字变更历史 1999年12月16日,ISO推出了C99标准,该标准新增了5个C语言关键字: inline restrict _Bool _Complex _Imaginary(注意bool 从 ...
- C/C++ 知识点---C语言关键字(32个)
C/C++ 知识点 1.C语言关键字(32个) <1>.基本数据类型 [5] void :声明函数无返回值或无参数,声明空类型指针 char :声明字符型变量 int :声明整形变量 fl ...
- 执行Go程序的三种方式及Go语言关键字
执行 Go 程序的三种方式及 Go 语言关键字 执行 Go 程序的三种方式 一.使用 go run 命令 二.使用 go build 命令 Step1. 对 go 源码源文件执行 go build 命 ...
- 继续学习:C语言关键字
auto :声明自动变量 break:跳出当前循环 case:开关语句分支 char :声明字符型变量或函数 const :声明只读变量 continue:结束当前循环,开始下一轮循环 default ...
- 统计C语言关键字出现次数
统计C语言关键字出现次数 <C程序设计语言>K&R版本第6章结构6.3结构数组内容 /* Name: 统计c语言关键字出现次数 Copyright: Author: lingr7 ...
随机推荐
- sql server中分布式查询随笔
由于业务逻辑的多样性 经常得在sql server中查询不同数据库中数据 这就产生了分布式查询的需求 现我将开发中遇到的几种查询总结如下: 1.access版本 --建立连接服务器 exec sp_a ...
- Android系统简介(上):历史渊源
上个月,看到微信的一系列文章,讲到Linux的鼻祖-李纳斯的传记<Just for Fun>, 其人神乎其能, 其人生过程非常有趣,值得每个程序员细细品味. 而实际上,对我而已,虽然做软件 ...
- 第七篇、hitTest UITabbar中间突出按钮额外增加可点击区域
简介: 以前UITabbar使用中间有一个凸起按钮时,常常就需要用到hitTest来处理可点击的范围. 示例代码: - (UIView *)hitTest:(CGPoint)point withEve ...
- Xcode中添加代码块的方式
在写代码的过程中,经常会有重复的代码(比如说,cell的使用),当然了复制粘贴也不是不行,但是Xcode提供了一个很方便的东西. 1.在Xcode右下角你会看到有一个{}的东西,这里是一些常用的代码块 ...
- C#基于AE组件二次开发常见问题
由于本人从事的是在.net平台下进行GIS的二次开发,所以第一篇博文就说一下:我最近在项目中出现的常见的问题,如果能够给大家增加一点点便利,也是我的荣幸,如果大家对于这次博文有什么意见和建议,欢迎大家 ...
- mysql学习笔记6——用phpmyadmin和在腾讯微云中创建数据库
安装phpmyadmin就不多说了,对于新手,推荐使用wamp(windows系统),傻瓜式安装,很好用.安装完后在浏览器栏输入localhost
- 【NOI2001】炮兵阵地
[题目描述] 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形 ...
- (转)MySQL Workbench的使用教程 (初级入门版)
转自:http://www.cnblogs.com/yqskj/archive/2013/03/01/2938027.html MySQL Workbench 是 MySQL AB 最近释放的可视数据 ...
- php二维数组,按照指定的key,去排序value值
$arr = array( '11'=>array( 'a'=>1, 'b'=>2, ), '22'=>array( 'a'=>3, 'b'=>4, ), '33' ...
- Array.prototype.map()详解
今天在地铁上看到这样一个小例子: ["1","2","3"].map(parseInt); 相信很多人和我一样,觉得输出的结果是[1,2,3 ...