static
- 修饰局部变量
- 让局部变量只初始化一次
- 局部变量在程序中只有一份内存
- 不会改变局部变量的作用域,仅仅是改变了局部变量的生命周期(只到程序结束,这个局部变量才会销毁)
- 修饰全局变量
全局变量的作用域仅限于当前文件
const
- 没有const修饰的指针
// 定义一个指针变量
int *p = NULL;
// 定义2个int类型的变量
int a = 10;
int b = 30;
// p指向a
p = &a;
*p = 20;
// p指向b
p = &b;
*p = 40;
NSLog(@"%d %d", a, b);
- const修饰的* p: 编译器报错,不能修改*p的值
// const修饰的*p
const int *p = NULL;
int const *p = null;
*p = 20; // 编译器报错,不能修改*p的值
- const修饰的p:被const修饰的p只能存一次地址,以后再也不能其它存地址了,否则编译器报错
// const修饰的指针变量p
int * const p = NULL;
int a = 20;
p = &a; // 编译器报错,不能修改指针变量p
static const 与 #define
相同点:都不能再次被修改,一处修改全部改变
不同点:statci const 修饰变量只有一份内存,宏则是简单替换。
const一般使用
.h 文件
// 引用某变量,如果没有使用const修饰,就不能直接在编译的时候就能检测是否修改了ZMJRed
extern const CGFloat ZMJRed;
extern NSString * const ZMJName;
或
UIKIT_EXTERN const CGFloat ZMJRed;
UIKIT_EXTERN NSString * const ZMJName;
.m 文件
// 定义了整个程序都能访问的常量
const CGFloat ZMJRed = 0.4;
NSString * const ZMJName = @"jack";