c语言

const和static的区别

2016-04-11  本文已影响589人  imy博
 const与宏区别:
    1.编译时刻: 宏:预编译 const:编译
    2.编译检查:  宏不会做编译检查 const会
    3.宏好处: 宏可以定义函数和方法 const不行
    4.宏坏处: 大量使用宏,会导致预编译时间过长


 宏:在开发中会把一些常用的变量的值定义成宏
 
    但是苹果不太推荐我们使用宏,推荐我们使用const

/*
    const作用:
            1.用于修饰右边变量(基本变量,指针变量)
            2.被const修饰变量只读(普通的变量是可读可写的)
 */

    // 面试题
    int * const p1; // p1:只读  *p1:变量
    const int *p2; // p2:变量 *p2:只读
    int const *p3; // p3:变量 *p3:只读
    int const * const p4; // p4:只读 *p4:只读
    const int * const p5; // p5:只读 *p5:只读


/*
    开发中const使用场景
    1.const替换宏,宏:在开发中将常用字符串或者基本数据定义成宏 -> const
    2.修饰方法的参数,让方法的参数只读(即用const直接修饰方法的参数参数)
 */

—————————————————————————————————————————————————————————————————————————————

/*
    static作用:
            1.修饰局部变量,只要被static修饰局部变量,这个局部变量的生命周期就会延长,将局部变量从栈转移到静态区中(整个app运行过程中都在),作用域不变
            分配时刻:程序一运行的时候就会分配内存
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    // 运行到这一行的时候 才去分配内存 √
    static int i = 0;
    
    i++;
    
    NSLog(@"%d",i);
    
}

 
      /*
     static应用场景:
     当某个方法的调用频率非常高, 而该方法中更有些变量的值是固定不变的
     那么这个时候就可以使用static来修饰该变量, 让该变量只开辟一次存储空间
     这样可以提高程序的效率和性能
     */

            2.修饰全局变量,只要被static修饰全局变量,这个全局变量只能在当前文件下使用
 
 
    extern作用:
                1.仅仅是用来声明外部全局变量
                注意点:extern不能用来定义变量(注意:声明变量和定义变量的区别)
      int a;  ——>  这是声明变量a
       int a  = 0;  ——>这是定义一个变量a 
*/

—————————————————————————————————————————————————————————————————————————————
/*
    static和const联合使用
    static:修饰全局变量,全局变量只能在当前文件下使用
    const:被它修饰的变量,是只读的变量
 */
static NSString * const isOn = @"isOn”;//isOn字符串对象是只能在当前文件下访问的只读的字符串对象(指针的指向不能改变),不能重新给isOn赋值(指针的指向发生改变)



—————————————————————————————————————————————————————————————————————————————
/*
    开发中如果使用全局变量,最容易导致冲突
 
    开发规范:只要定义全局变量,都不能在自己的类中定义,一般开发中,我们会搞一个公用文件去定义全局变量
 
 */




上一篇下一篇

猜你喜欢

热点阅读