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. swift 简单风格的Toaster
  2. 高矮不同的人排队问题
  3. 微量元素重塑新生态-农业大健康·李喜贵:谋定功能性农业
  4. linux 显示文字在桌面背景,Linux下Xwindow的字体配置(所谓的字体美化)
  5. HDU4607(求树中的最长链)
  6. 6月24 面向对象的设计原则-----工厂模式和单列模式
  7. kaggle数据集_Kaggle上有170万份ArXiv文章的数据集
  8. php找不到phpmyadmin,phpMyAdmin 安装配置方法和问题解决
  9. linux枯燥命令行下的“有趣命令”
  10. Java基础学习总结(161)——Java 重试机制
  11. “手把手撕LeetCode题目,扒各种算法套路的裤子”
  12. 轻量级前端路由 router directorjs兼容ie8
  13. Main Menu菜单栏消失解决
  14. Java笔记——08.面向对象(中级)
  15. mysql登陆案例_Mysql用户登陆验证过程 案例
  16. SAMA5D3X-EK 嵌入式linux内核编译启动及通过nfs通过网络启动文件系统及文件系统镜像的制作
  17. KMP算法理解(参考BILIBILI正月点灯笼)
  18. Python gevent学习笔记-2
  19. 阿里云大数据开发一面面经,已过,面试题已配答案
  20. 为什么电子邮件的账号地址公司是统一的,电子邮件地址该怎么写?

热门文章

  1. 吴恩达深度学习5.2练习_Sequence Models_Operations on word vectors
  2. 内外网同时使用解决办法
  3. 远程LInux和秘钥认证
  4. 400G时代即将来袭,新型光纤或为最佳拍档
  5. 我看《Linux0.11内核完全注释2.01》的方法
  6. IP地址专题二:子网掩码入门
  7. 我是大道至简山寨版~
  8. Netty 的基本简单实例【服务端-客户端通信】
  9. kubernetes资源管理
  10. Linux常用脚本命令总结