1、const 的作用
- 1、const的意思就是常量,其作用也是修饰过的数据不能再改变。
- 2、被const修饰的变量就会变成只读的,也就是变成了常量。
//被 const 修饰后的变量都变成了只读的,也就是常量
int const number = 1234567788; // const 修饰基本数据类型
//还可以这样写
// const int num = 123456788;
number = 23456667; //此时报错,因为被 const 修饰的变量只读,不能设置
- 3、const只修饰右边的内容。
//const 只修饰右边
int const *a1; // a1 是变量,可变. *a1 是常量,不可变
NSString * const str1 = @"happy"; // str1 是常量,不可变. *str1 是变量, 可变
const NSString * const str2 = @"happy"; // str2 是常量. *str2 也是常量
2、const 三种情况,规律:修饰哪个,哪个不可变,其他都可变
1> 修饰指针
NSString const *b = @"1";
const NSString *c = @"1";
c = @"3"; // const 修饰的是指针变量, 指针指向的对象是变量,可以修改
// *b = @"2"; //报错, *b是常量不能修改
2> 修饰变量
// 2. 修饰变量
NSString * const d = @"1";
// d = @"1"; //报错: const 修饰是变量,所以指针指向的对象不能修改,指针可以修改
3> 既修饰指针又修饰变量
// 3. 既修饰指针又修饰变量
const NSString * const f = @"1";
f = @"2"; //指针和指针指向的对象都不能修改
4> 修饰对象
//修饰对象: 对象不可变
Person * const per = [[Person alloc]init];
// per = [Person new]; //报错,因为修饰的是对象本身,不能修改对象的地址.
//但是可以修饰对象的属性,因为属性是没有被 const 修饰的
per.name = @"Jack";
5> 修饰方法中的参数
// const 修饰方法参数
- (void)testConst:(NSString * const)name {
// name = @"Lily"; //报错,因为参数被 const 修饰了,所以参数不能被修改(即使是形参)
}