const,static,extern,#define

时间:2021-09-29 21:41:09

一、const

     // 简单定义变量,可以修改变量的值
int a = ;
a = ; // const的用法
// 用法一:
const int b = ;
int const c = ; // 不允许修改,因为 const 修饰 b/c,指定 b/c 为常量!!
// b = 10;
// c = 20; // 用法二
// const 修饰指针变量访问的内存空间,修饰的是右边的 指针!!
const int *p1;
int const *p2; // p1/p2 可以修改,*p1/*p2 不可以修改!!
p1 = &a;
printf("%d\n", *p1); // 打印结果 *p1 为 20。指针指向了变量 a 内存地址

二、static

1.最重要的作用是隐藏——(修饰全局变量,只能在本文件中访问,修改全局变量的作用域,生命周期不会改)

2.保持数据持久——修饰的变量保存在全局区(静态区),初始化的全局变量和静态变量只在程序开始运行完成唯一一次初始化,程序结束由系统释放内存。

3.默认初始化为0(全局变量也具备)(全局区内存中所有字节默认都为 0x00);

 

三、extern

用来获取全局变量,extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。

四、const和#define

const:翻阅苹果API,发现苹果使用定义大量字符串常量!关于字符串常量的定义,苹果推荐我么你使用const,而非宏定义。(关于宏定义,可以查看我的博客 宏定义)

宏是编译之前对程序中使用宏的地方简单替换,不会出现报编译错误;const是编制时刻,会作类型检查!使用大量宏,容易造成编译时间久,每次都需要重新替换。另外,宏定义的是常量,常量会放在常量区!

五、static与const的组合

作用:声明一个只读的静态常量。通常用来定义定义一个文件中常用的字符串常量。(例如cell重用标示符)

六、extern和const的组合

场景:多个文件都会用到同一个字符串常量。可以使用该组合为我们带来方便,达到多个文件共享一份全局变量。

例如OC中:

 extern NSString * const MyClass;

尊重作者劳动成果,转载请注明: 【kingdev】