一、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. RouterOS DNS劫持(转)

    什么是DNS劫持 DNS劫持就是通过技术手段,来控制用户解析域名的IP地址.举个例子,正常解析域名www.awolf.net时应该返回IP:64.64.30.60:但现在通过DNS劫持,使域名www. ...

  2. Ubuntu 15.04 开机无法进入图形界面,自动进入emergency mode解决方法

    原因:关机的时候没有正常退出,直接强制关机了... 解决: 就是在那个GIVE root password for maintenance (or type control-D to continue ...

  3. java 蓝桥杯算法提高 _3K好数

    nums[i][j] 存的是i位数的时候,首位数字是j的K好数的数目,i从1位开始的结果,去算2位时的结果,去算3位时的结果...最后得到l位的结果.K进制只是一个范围. import java.ut ...

  4. sqlserver for xml

    FOR XML子句有四种最基本的模式 1.AUTO模式:返回数据表为起表名的元素,每一列的值返回为属性:2.RAW模式:返回数据行为元素,每一列的值作为元素的属性: 3.PATH模式:通过简单的XPa ...

  5. iOS倒计时

    现在开发基本上都有发送验证码,倒计时,下面说一种 #import <UIKit/UIKit.h> @interface UIButton (CountDown) -(void)startT ...

  6. ios-loadView

      // 先判断当前控制器是不是从storyBoard中加载,如果是,就会加载stroyBoard的view //   判断是否是xib加载 // 否则创建一个空白的view // 如果重写了此方法, ...

  7. Linux显示文件前几行、拷贝文件前几行、删除文件前几列

    [一]显示文件前几行 ll -lrth:按照更改时间倒序排列,最新文件在下边 ll -lrSh:按照文件大小倒序排列,最大文件在下边 grep --color :高亮查询关键字 grep -A 10 ...

  8. 基于Mybatis分页插件PageHelper

    基于Mybatis分页插件PageHelper 1.分页插件使用 1.POM依赖 PageHelper的依赖如下.需要新的版本可以去maven上自行选择 <!-- PageHelper 插件分页 ...

  9. loadrunner12-错误 -26366: 找不到 web_reg_find 的“Text=19728.00”

    转:检查点(web_reg_find函数详解) LR检查点 设置检查点的目的不只是为了验证我们的脚本没有错误,而更重要的是一个规范问题,如何使得测试结果更具有说服力,因此建议所有的测试脚本中都添加检查 ...

  10. mosquitto配置文件/etc/mosquitto/mosquitto.conf配置参数详细说明

    mosquitto配置文件/etc/mosquitto/mosquitto.conf配置参数详细说明 摘自:https://blog.csdn.net/weixin_43025071/article/ ...