Maison  >  Questions et réponses  >  le corps du texte

c++ - 程序中常量的定义

#define SIZE 100;
const int size = 100;

他们有什么区别

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

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

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

PHP中文网PHP中文网2764 Il y a quelques jours534

répondre à tous(4)je répondrai

  • 巴扎黑

    巴扎黑2017-04-17 13:56:08

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

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

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

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-17 13:56:08

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

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

    répondre
    0
  • 迷茫

    迷茫2017-04-17 13:56:08

    @胡须老头 貌似没有分配

    调试信息:

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

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-17 13:56:08

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

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

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

    répondre
    0
  • Annulerrépondre