首先讲C编译器的内存分配:

代码区

数据区

用户区=线程栈+堆

其中的数据区存储:常量(define)+静态变量(static)+符号集(const)+全局变量

 
然后讲一下编译的大致顺序:
注释-->
预处理-->
编译-->
连接。
 
它们的保存:
const修饰的是变量,会被编译到符号集中去,它本身是变量这是个大前提,如果把这个概念弄错了,你就会很可能会用这个变量来做数组的维数,而数组的维数只能是常量,这点要明白。
define定义的常量就可以作为数组的维数,它当然是保存在数据区的常量空间内,并且它发生在预处理阶段,相对const变量的处理要早。
static修饰的变量则被编译进数据区的静态空间内,同const修饰的变量和define定义的常量一样,一直存在,直到程序终止。
 
它们的初始化(如果有的话)
const修饰的变量是在编译时放到了符号集中,只是在第一次使用的时候分配空间,没有什么初始化这样的概念。
define定义的变量则是在每次出现在“=”的右边时都会分配空间,你要注意是都分配了空间。至于在预处理的时候有没有分配空间的概念,我自己尚不清楚。
static修饰的变量的初始化要等到运行的时候。
 
它们存在的目的:
const和static修饰的数据都是有类型的,由于const修饰变量常常理解成常量,它可以看做是取代define定义的无类型常量的。
static修饰变量则多在子函数中使用,你大可发挥一下,找到它的妙用。

转:const“变量”、define的常量和static 变量的更多相关文章

  1. Paip.最佳实践-- Buildin variale 内建变量 ,魔术变量,预定义变量,系统常量,系统变量 1

    Paip.最佳实践-- Buildin variale 内建变量 ,魔术变量,预定义变量,系统常量,系统变量 1.1.1       C++内建变量(__LINE__).... 1.1.2       ...

  2. PHP中const和define()定义常量的细节区别

    转自:http://www.365mini.com/page/difference-of-define-and-const.htm 众所周知,在PHP中(php 4及以后),我们可以使用函数defin ...

  3. const与#define宏常量 , inline与#define

    1.预处理 预处理器是在真正的编译开始之前由编译器调用的独立程序.预处理器可以删除注释.包含其他文件以及执行宏替代. 预处理命令(宏定义#define..#undef. 文件包含#include. 条 ...

  4. 变量、变量作用域、常量final、变量的命名规范

    变量 变量是什么:就是可以变化的量! Java是一种强类型语言,每个变量都必须声明其类型. Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域. 注意事项: 每个变量都有类型,类 ...

  5. #region 常量和静态变量静态类readonly

    #region 常量和静态变量静态类readonly //---------------------------------------------------------------------- ...

  6. iOS—— static和const联合使用;使用static const 与 #define

    static和const联合使用:   static将一个全局变量变成局部变量   const将一个局部变量变成局部常量 // 定义了一个局部常量      static const CGFloat ...

  7. iOS-static和const联合使用;使用static const 与 #define

    static和const联合使用:   static将一个全局变量变成局部变量   const将一个局部变量变成局部常量 // 定义了一个局部常量      static const CGFloat ...

  8. const、define 和 static 的区别

    目录 define.const static define.const 在 C++ 中,const 和 define 都可以用来定义常量.但是这二者之间有很大的区别: define 的作用 用 def ...

  9. 在php中定义常量时,const与define的区别?

    问]在php中定义常量时,const与define的区别?  [答]使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数.另外const在编译时要比define快很 ...

随机推荐

  1. C#基础--struct(结构体)

    结构体和类有点类似    我们定义一个类的时候    是class   类名   定义结构体的时候是 struct   结构体名 结构体的写法 struct Point { // public int ...

  2. oracle内置sql函数(转)

    转自:http://www.cnblogs.com/yening10000/archive/2009/07/02/1515284.html F.1字符函数——返回字符值 这些函数全都接收的是字符族类型 ...

  3. C. Ilya and Sticks

    C. Ilya and Sticks time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  4. CMP指令(转)

    刚刚看到了cmp指令,一开始有点晕.后来上网找了些资料,终于看明白了,为了方便初学者,我就简单写下我的思路吧.高手绕过,谢谢! cmp(compare)指令进行比较两个操作数的大小 例:cmp opr ...

  5. VMware系统运维(九)VMware vSphere Client 安装

    1.点击下一步 2.接受协议,下一步 3.选择安装位置,下一步 4.开始安装 5.安装完成,进行登录测试. VMware vsphere 5.1 登录名为administrator    VMware ...

  6. Divisibility by Eight (数学)

    Divisibility by Eight time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  7. 剑指Offer04 重建二叉树

    代码有问题 /************************************************************************* > File Name: 04_ ...

  8. jQuery选择器之层次选择器Demo

    测试代码: 02-层次选择器.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...

  9. PKIX: unable to find valid certification path to requested target

    // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = n ...

  10. 通过SQL ID查询SQL Text

    SELECT SQL_ID, SQL_TEXT,FIRST_LOAD_TIME, EXECUTIONS FROM V$SQLAREA where SQL_ID='22v8fyk0juw25';