const定义的只读变量在程序运行过程中只有一份拷贝(因为它是全局的只读变量,存放在静态区),而#define定义的宏常量在内存中有若干个拷贝。

#define宏是在预编译阶段进行替换,而const修饰的只读变量是在编译的时候确定其值。

#define宏没有类型,而const修饰的只读变量具有特定的类型

===========================================

const int *p;   //p可变,p指向的对象不可变

int const*p;  //p可变,p指向的对象不可变

int *const p;  //p不可变,p指向的对象可变

const int *const p;  //指针p和p指向的对象都不可变

这里给出一个记忆和理解的方法:

先忽略类型名(编译器解析的时候也是忽略类型名),我们看const离哪个近。"近水楼台先得月",离谁近就修饰谁。

判断时忽略括号中的类型

const (int) *p;   //const修饰*p,*p是指针指向的对象,不可变

(int) const *p;  //const修饰*p,*p是指针指向的对象,不可变

(int)*const p;   //const修饰p,p不可变,p指向的对象可变

const (int) *const p;  //前一个const修饰*p,后一个const修饰p,指针p和p指向的对象都不可变

const与#define宏定义的区别——C语言深度剖析相关推荐

  1. const常量与define宏定义的区别

    #define RADIUS 100; const  float   RADIUS = 100; (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. ( ...

  2. C++ const关键字的总结(全局/局部变量、修饰指针和引用、成员函数和数据成员、修饰类对象、const与宏定义的区别、Static与Const的区别)

    const关键字 const关键字 1.什么是const 2.使用原理 2.1.const全局/局部变量 2.2.cosnt修饰指针和引用 2.3.const修饰函数参数 2.4.const修饰函数返 ...

  3. C语言基础知识之define宏定义表达式,undef,内存对齐,a和a的区别,数组知识点,int (*)[10] p,二维数组参数与二维指针参数,函数指针数组,常见的内存错误及对策

    一.用define宏定义表达式 1.定义一年有多少秒: #define SEC_A_YEAR 60*60*24*365 //上述描述不可靠,没有考虑到在16位系统下把这样一个数赋给整型变量的时候可能会 ...

  4. #define宏定义是什么?怎么写?一文搞懂。

    前言 第一次接触宏定义的时候,是在学校的C++课程大作业中.当时有幸看到了大佬写的源码,里面有很多的宏定义.当时并不了解宏定义的妙用,只感觉它像是定义了一个变量一样,不好理解还有些多此一举. 这之后在 ...

  5. C++中的内联函数和C中的宏定义的区别

    在C++中内联函数: 内联函数即是在函数的声明和和定义前面加上"inline"关键字,内联函数和常规函数一样,都是按照值来传递参数的,如果参数为表达式,如4.5+7.5,则函数将传 ...

  6. define宏定义中的#,##,@#及\符号

    define宏定义中的#,##,@#及\符号 在#define中,标准只定义了#和##两种操作.#用来把参数转换成字符串,##则用来连接两个前后两个参数,把它们变成一个字符串. 1.# (string ...

  7. 内联函数有什么优点?内联函数与宏定义的区别?

    内联函数的优点 内联函数比宏定义更加的安全,因为前者进行参数检查,而后者仅仅是简单地文本替换. 内联函数和宏定义的区别 宏定义是在预处理阶段进行的文本替换. 内联函数是在编译阶段进行的替换,优点是减少 ...

  8. 关于C语言刷题(#define宏定义函数的常见错误)

    关于C语言刷题(#define宏定义函数的常见错误) 首先我们来先看对#define的定义 define,宏定义,C语言中预处理命令一种.分为无参宏定义和带参宏定义.无参宏定义的一般形式为:#defi ...

  9. 宏定义处理特殊字符 -_c语言编译与预处理命令

    所谓预处理,是指源文件在进行编译的第一遍扫描之前所作的工作,由预处理程序完成.当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分进行处理,处理完毕自动进入对源程序的编译. 在前面 ...

最新文章

  1. python分析基金数据_python基金会(大数据分析),的,PYTHON,基础,选择,练习
  2. .NET斗鱼直播弹幕客户端(上)
  3. 查看进程占用,并kill掉
  4. 谷歌修复已遭在野利用的两个 0day
  5. [bug解决] TensorFlow安装错误:ERROR After October 2020 you may experience errors when installing
  6. 【bzoj4940】这是我自己的发明
  7. 电子相册系统(八)验证用户是否可用
  8. [luogu1081] 开车旅行
  9. python下载腾讯视频_使用python 下载 mp4格式的腾讯视频
  10. webpack基础和完整项目脚手架搭建教程-郭永峰-专题视频课程
  11. C语言初学之自学总结
  12. RaiseCOM(瑞斯康达)交换机常用配置命令大全
  13. 网页设计语言html做思维导图,web网页实现思维导图展示
  14. HRBUST - 1646
  15. Homebrew安装使用卸载
  16. libcurl模拟hi百度登陆
  17. DICOM医学图像处理:二零一四▪DICOM专栏一览
  18. scilab系列---概述
  19. unity vr手柄移动_移动内外VR跟踪,现在可通过Unity在手机上轻松使用
  20. arrays shot JAVA_Apache Flink 1.3-SNAPSHOT 中文文档: Java 8

热门文章

  1. shell 整理(36)===写斐波那契数列
  2. 最新dotCMS SQL注入漏洞 攻击者可获得敏感数据 绿盟科技发布安全威胁通告
  3. Jquery获取列表中的值和input单选、多选框控制选中与取消
  4. 用Remastersys定制自己的Ubuntu安装光盘
  5. Log42j 源代码分析:plugin(插件)机制
  6. linux 添加永久路由的几种方法。
  7. Centos5上部署udev
  8. Visual Studio 2010 实用功能总结 II
  9. 神话系列之一 C# 开发的操作系统和数据库
  10. 使用维护Relationship