宏和const的区别

1.编译器处理方式不同
宏:预编译时候执行
const:编译时刻时候执行

2.类型和安全检查不同
宏:没有数据类型,在编译时不会检查错误
const:有具体的数据类型,在编译时会检查错误

3.存储方式不同
宏:只做展开使用,有多少地方使用,就展开多少次,不分配内存
const:会在内存中分配内存(堆和栈)

宏优点:可以定义代码
宏缺点:编译时间过长,因此常用的字符串用const修饰

const特点:
1.修饰的变量是只读的,不可以更改
2.能够修饰地址,不能够修改地址访问的值

int  const a = 10;
const int b = 11;
NSLog(@"修饰基本变量====%d,%d",a,b);

打印结果:2018-06-19 09:11:35.235284+0800 宏和const[882:29057] 修饰基本变量====10,11

结论:const放在变量左边,或者放在变量类型左边都一样,被const修饰的变量都是只读的,当有字符串常量的时候,苹果推荐我们使用const。

1.1 修饰地址

int a = 12 ;
int * const p1 = &a;
NSLog(@"修饰指针变量====%d,%p",a,p1);

打印结果:修饰指针变量====12,0x7ffeeba1899c
结论:能够修饰指针变量

* p1 = 13;//能修改p1访问的值
NSLog(@"修饰指针变量====%d,%p",a,p1);

打印结果:修饰指针变量====13,0x7ffee74c098c
结论:能够访问

//    int b = 14;
//     p1 = &b;//不能修改p1的地址
会报错,不能够编译

1.2 修饰地址访问的存储空间内容

int a = 12;
int const * p1 ;
//    p1 = &a;//能修改p1的地址
//*p1 =20;//不能能修改p1访问的值
NSLog(@"修饰地址访问的存储空间内容====%d,%p",a,p1);

你可能感兴趣的:(宏和const的区别)