一、define 的用法:

在c语言中我经常会看到 :#define  PI  12 ,这是创建了一个符号常量,这里面要注意没有那个等于号“=”;

二、const 的用法:

1、const 也可以来创建符号常量,但是const 的用法比define 在用法方面更加灵活,它可以创建const数组、const 指针、指向const 的指针,

const  int RATE = 100; 这里可以看出一个区别,在const 创建的符号常量赋值时有一个“=”,这个不要被忽列掉,不然会出错的;这里举几个例子:

const 数组:const  int days[10]={1,2,3,4,5,6,7,,8,9,10};注意:之后在使用这个数组时,不能修改数组元素的值,例如:days[9]=1000;这将会产生一个错误。

const 指针:double rate[2]={1,2};

const  double *pd=rate(创建了一个指向了const的指针pd);             *pd=44(这将产生一个错误),而rate[0]=22(这个是允许的,因为rate未被const限定)

所以说,指向const 的指针不能用来修改值,但是我们可以让pd指向别处(pd++),也就是指向了rate[1],这个是被允许的;

2、在const 创建的指针赋值时要注意几点:

int  rate[4]={1,2,3,4};

const int  tu[4]={5,6,7,8};

const int * pc=rate;(这个赋值有效),      pc=tu (有效)  pc=&rate[2](有效)

int  * pcc=rate;(有效) ,pcc=tu(这个赋值无效),pcc=&rate[2];(有效);

所以说,把const 数据或非const 数据的地址初始化为指向const 的指针或为其赋值是合法的,不能把const数据地址赋给普通指针;

3、const 的其它用法:

声明一个不能指向别处的指针,注意const 的位置就可以了:

double rate[4]={1.2,1.3,1.4,1.5}

double *const pc =rare;

pc=&rate[3](这个是不被允许的)

*pc=22.44(这个修改值是被允许的,但是只能修改第一个值,也就是初始化那个地址上的值)

创建指针的时候,可以使用两次const,该指针既不能修改它指向的地址,也不能修改指向地址上的值:

double rate[4]={2.3,5.6,7.8,8.9}

const double * const pc =rate;

pc=&rate[2](这个不允许指向别处)

*pc=86.3(这个也不被允许修改数组中的值)

说了这么多,总结一下:

在运用const 的时候,关键是注意它在那个位置上,在不同位置上有不同的用法,而且在赋值时,类型要对头,不能把const 的数据赋值给非cosnt 数据,但是可以让非const 数据赋值给const数据。

const 与define 创建符号常量的 用法与区别的更多相关文章

  1. const和define在值定义上的区别

    (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. (2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开. const常量有 ...

  2. const与#define、结构体对齐、函数重载name mangling、new/delete 等

    一.bool 类型 逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC++中为1个字节. 声明方式:bool result; result ...

  3. C++ const、volatile、mutable的用法 (转)

      const.volatile.mutable的用法 鸣谢作者: http://blog.csdn.net/wuliming_sc/article/details/3717017 const修饰普通 ...

  4. const和#define常量的区别

    (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. (2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开. const常量有 ...

  5. 函数定义从零开始学C++之从C到C++(一):const与#define、结构体对齐、函数重载name mangling、new/delete 等

    今天一直在学习函数定义之类的问题,下午正好有机会和大家共享一下. 一.bool 类型 逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC+ ...

  6. C++ 中 const和define的区别

    来源网址:http://wujiangping.blog.163.com/blog/static/195182011201255115125205/ 请区别用#define命令定义的符号常量和用con ...

  7. const、volatile、mutable的用法

    http://blog.csdn.net/wuliming_sc/article/details/3717017 const.volatile.mutable的用法 const修饰普通变量和指针 co ...

  8. const 和 #define区别_fenglovel_新浪博客

    const 和 #define区别 (2012-12-11 14:14:07) 转载▼ 标签: 杂谈   (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使 ...

  9. const 和 #define区别

    (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. (2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开. const常量有 ...

随机推荐

  1. 第2章地址Address(WCF全面解析3)

    WCF顾明思义,就是在Windows平台下解决通信(C,Communication)的基础框架(F,Foundation)问题. 终结点是WCF最为核心的对象,因为它承载了所有通信功能.服务通过相应的 ...

  2. 论immutable不可变性

    什么叫immutable和mutable?简单来讲,一个immutable的对象一旦被创建好,它的状态将不会改变.反过来,如果一个类的实例是immutable的,那么我们把这个类也称作immutabl ...

  3. Python PyInstaller 打包报错:AttributeError: 'str' object has no attribute 'items'

    pyinstaller打包时报错:AttributeError: 'str' object has no attribute 'items' 网上查询,可能是setuptools比较老: 更新一下 p ...

  4. Redis只作为缓存,不做持久化的配置

    #1.配置缓存内存限制和清理策略 #作为缓存服务器,如果不加以限制内存的话,就很有可能出现将整台服务器内存都耗光的情况,可以在redis的配置文件里面设置: #example: # 限定最多使用1.5 ...

  5. [JAVA] 小数转百分数

    import java.text.NumberFormat; //获取格式化对象 NumberFormat format = NumberFormat.getPercentInstance(); // ...

  6. octomap相关

    转载自http://blog.csdn.net/linuxarmsummary/article/details/50924947 什么是octomap? RGBD SLAM的目的有两个:估计机器人的轨 ...

  7. Python实现二叉树的遍历

    二叉树是有限个元素的集合,该集合或者为空.或者有一个称为根节点(root)的元素及两个互不相交的.分别被称为左子树和右子树的二叉树组成. 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉 ...

  8. MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error

    今天购物车突然不能添加了,发现redis报错了,重启了一下好了,一会又报错了. 错误信息: MISCONF Redis is configured to save RDB snapshots, but ...

  9. 第01章 ElasticSearch简介

    本章内容 Apache Lucene是什么. Lucene的整体架构. 文本分析过程是如何实现的. Apache Lucene的查询语言及其使用方法. ElasticSearch的基本概念. ELas ...

  10. Cocosd-x-2.2.2 & VS2012 & Eclipse 开发环境搭建

    1.安装软件: 1.1 安装JDK(JDK1.7.0_51) JAVA_HOME C:\Program Files\Java\jdk1..0_51 CLASSPATH .;%JAVA_HOME%\li ...