#define,const ,static 的使用总结

static的使用

1、全局变量(初始化和未初始化),静态变量(全局和局部)  都在静态区存放,生命周期大于主函数,进程开始时创建,进程结束时回收
2、全局变量和静态变量的作用域问题
    1)全局变量的作用于就是全局,跟放置位置无关
    2)静态全局变量:把修饰的变量的作用与限制在本文件中,
          静态局部变量:只初始化一次,以后直接使用,声明周期贯穿整个进程
    3)static修饰函数(静态函数):限制该函数只能在本文件中使用,若类成员函数为静态函数,则该函数属于整个类

 

const的使用

1.const 只读 限制变量的属性(常变量)

    const int *p = &a;       //也可以 int const *p=&a
    *p =30                    //出错,因为指针所指向的空间内容不能改

2. int * const m=&a;
     m= &b;                  //出错,因为指针指向不能改

3.const int * const n=&a      //此时指针指向和指针指向内容都不能改

4.变量被定义const时,两种方式可以改:
                     通过指针修改
                     强制转换变量的类型

 

const 与 define的区别

 1.编译器处理的方式不同:

               define是在预处理阶段展开,const常量是编译运行阶段使用.

 2.类型和安全检查不同

              define宏没有类型,不做任何类型检查,仅仅是展开替换, const常量有具体的类型,在编译阶段会执行类型检查。

 3.存储方式不同

              define 宏 仅仅是展开与替换,有多少地方使用,就展开多少次,预处理阶段不会分配内存;const常量定义时会在内存中分配

 4. const 可以节省空间,避免不必要的内存分配:

              例: #define PI=3.14                                            //常量宏

                       const  double  Pi=3.14;                             //此时并未将Pi放入内存

                        double  a=Pi;                                            //此时为Pi分配内存a,以后不分配;

                        double  b=PI;                                             //编译期间进行宏替换,分配内存b;

                        double  c=Pi ;                                            //不分配内存c

                        double   d=PI;                                            //进行宏替换,再次分配内存d

              const 定义从汇编的角度来看,只是给出了对应的内存地址,而不是像#define 一样给出的是立即数,所以const常量在程序运行的时候只有一次拷贝,而#define定义的常量在内存中有若干个拷贝。

 5.提高了效率:

                   编译器通常不为普通的const常量分配内存空间,而是将他们保存在符号表中,这使得他成为一个编译期间的常量,也没有了存储与读内存的操作,使得它的效率也很高。

6.应该注意define 替换的时候 产生的一些“边缘效应”:

             例:#define N 2+3

                      float a=N/2;             //此时我们的预想值a=2.5, 实际上  a=2+3/2  =3.5

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值