首页 > 程序中常量的定义

程序中常量的定义

#define SIZE 100;
const int size = 100;

他们有什么区别

    char b[4] ;
    char (*pb)[4] = &b;//正常

b 是一个指针常量 ,也可以说是一个整形常量,可不可以理解是第二种情况,可以取地址,但不能赋值

b在内存中,有没有自己的空间


@胡须老头 貌似没有分配

调试信息:

栈上没给b分配空间,赋值使用lea
栈开辟16个字节,数组占8个,pa占4个,还有4个未使用


  1. define宏是在预处理阶段展开,const是在编译运行时

  2. define不带类型也不做安全检查,const带类型,在编译阶段会执行安全检查

  3. define占用代码空间;const是变量定义,占用数据段空间,效率更高


define 宏定义只是在编译器的预处理(Preprocessing)阶段进行单纯的文本替换,也就是正式开始编译时,你代码里SIZE都会被替换成100。编译报错或者运行时如果出了问题,你只能知道是100出了问题,SIZE对你来说是不可见的,这样不利于Debug。而使用常量就不会有这样的问题。

你下面的代码,看着虽然别扭,但是没问题。b是一个栈上分配的变量,自然占用了内存空间。


C语言学得不是很好,错了烦请指正^_^

char b[4] ;
char (*pb)[4] = &b;//正常

b是一个4B的数组;
pb是一个数组指针,指向b的内存空间,所以可以通过读取pb的内容得到b的地址,但是pb+1就指到了b的末尾字节之后了。

【热门文章】
【热门文章】