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. 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 ...

  2. C语言学习笔记--const 和 volatile关键字

    1.const关键字 (1)const 修饰的变量是只读的,它不是真正的常量,本质还是变量,只是告诉编译器不能出现在赋值号左边! (2)const 修饰的局部变量在栈上分配空间 (3)const 修饰 ...

  3. FILE不是C语言关键字

    FILE不是C语言关键字,只是标准C中的标准输入输出中定义的一个新的数据类型 stdio.htypedef struct _iobuf{ char* _ptr; int _cnt; char* _ba ...

  4. 李洪强漫谈iOS开发[C语言-009] - C语言关键字

    // //  main.m //  04 - C语言关键字 // //  Created by vic fan on 16/7/12. //  Copyright © 2016年 李洪强. All r ...

  5. c语言关键字总结

    1.关键字变更历史 1999年12月16日,ISO推出了C99标准,该标准新增了5个C语言关键字: inline restrict _Bool _Complex _Imaginary(注意bool 从 ...

  6. C/C++ 知识点---C语言关键字(32个)

    C/C++ 知识点 1.C语言关键字(32个) <1>.基本数据类型 [5] void :声明函数无返回值或无参数,声明空类型指针 char :声明字符型变量 int :声明整形变量 fl ...

  7. 执行Go程序的三种方式及Go语言关键字

    执行 Go 程序的三种方式及 Go 语言关键字 执行 Go 程序的三种方式 一.使用 go run 命令 二.使用 go build 命令 Step1. 对 go 源码源文件执行 go build 命 ...

  8. 继续学习:C语言关键字

    auto :声明自动变量 break:跳出当前循环 case:开关语句分支 char :声明字符型变量或函数 const :声明只读变量 continue:结束当前循环,开始下一轮循环 default ...

  9. 统计C语言关键字出现次数

    统计C语言关键字出现次数 <C程序设计语言>K&R版本第6章结构6.3结构数组内容 /* Name: 统计c语言关键字出现次数 Copyright: Author: lingr7 ...

随机推荐

  1. oracle数据库常用操作命令

    查看Oracle的版本: select * from product_component_version; 查看当前用户所具有的权限: SELECT * FROM DBA_SYS_PRIVS WHER ...

  2. ASP清除字串中的重复字符

    <% Function Test(str) dim intLen,i,strTemp,aryTest intLen = Len(str) strTemp = "" aryTe ...

  3. poj1274 匈牙利算法 二分图最大匹配

    poj1274 题意: 有n个奶牛, m个畜舍, 每个畜舍最多装1头牛,每只奶牛只有在自己喜欢的畜舍里才能产奶. 求最大产奶量. 分析: 其实题意很明显, 二分图的最大匹配, 匈牙利算法. #incl ...

  4. hdoj1285 拓扑排序

    题目链接 分析: 很明显,一看就是拓扑排序. 看似简单, 暗藏武器啊. 第一次做的时候一边拓扑排序一边标记他们的深度, 例如题中给的例子 {1 2:2 3:4 3 }.1的深度为1. 2.4的深度为2 ...

  5. 【JAVA】浅谈java枚举类

    一.什么情况下使用枚举类? 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便? 二.为什么不用静态常量来替代枚举类呢? public static final int SEASO ...

  6. jQuery 源码分析5: jQuery 基本静态方法(一)

    jQuery在初始化过程中会为自己扩展一些基本的静态方法和属性,以下是jQuery 1.11.3版本 239 ~ 564行间所扩展的静态属性和方法   jQuery.extend({ // 为每个jQ ...

  7. C++成员变量初始化顺序问题

    由于面试题中,考官出了一道简单的程序输出结果值的题:如下, class A { private: int n1; int n2; public: A():n2(0),n1(n2+2){} void P ...

  8. Angle

    1 What is Angle. The goal of ANGLE is to allow Windows users to seamlessly run WebGL and other OpenG ...

  9. Linux作业控制

    在Linux中,利用Shell的作业控制是比较常用的操作,在这一节中我们将探究作业控制相关的操作.为了方便我们查看区分不同的进行,我们编写如下程序,其功能是每间隔2秒输出一次自己的编号. /* ** ...

  10. 替换a链接的href和title

    新项目准备验收,客户检测网页有安全隐患,说是当前网页使用“http://”有风险,指定外部链接不用“http://”怎么整…… 后来想到用JS替换字符串去操作,找了半天总算找到合用的,最终是用JQ去更 ...