美文网首页
关于const 修饰的一些知识

关于const 修饰的一些知识

作者: LiYaoPeng | 来源:发表于2017-05-20 17:59 被阅读0次

1、前言

  1. const 修饰的是后面的东西
  1. const修饰的东西不可变

2、验证

1. 代码

static NSString *const a = @"a";//const 在“*” 与 “a” 之间
static NSString const* b = @"a";//const 在“*” 与 “NSString”之间
static const NSString *c = @"a";//const 在“NSString”前面
const NSString static *d = @"a";//const 在最前面

static NSString const * const A = @"a";//*前有const,* 与 A 之间也有const

@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    [self setUP];
}

- (void)setUP {
    NSString *aa = @"a";
    a = aa;//报错
    b = aa;
    c = aa;
    d = aa;
    A = aa;//报错

//下面全部报错
    *a = aa;
    *b = aa;
    *c = aa;
    *D = aa;
    *A = aa;
}

2.分析

  1. ** a:const*a 之间**
  1. 这时候,const修饰的是a,也就是a指针变量的地址,这时候a存的是字符串常量区的@“a”的地址。
  1. 所以按常理来说可以改变*a,但是不能改变a的值。
  2. 但是这里*a也是改变不了的,下面扩展会讲到
  3. ** b、�c 、 d : 都在*之前**

b = @"a";//const 在“*” 与 “NSString”之间
c = @"a";//const 在“NSString”前面
d = @"a";//const 在最前面
b 、c、 d的const 分别修饰的是b、c、*d
b对应的语义为b指针指向的内存空间的值。所以,可以改变b,但是不能改变b

  1. A*前有const,*A之间也有const

综上a、b、c、d的分析,A 就很容易被理解了。

3、扩展.字符串的特殊性

为什么*a的值不能改变?

  1. 字符串是存在字符串常量池里面,然后要是有个指针想要指向一个字符串,先会到字符串常量区进行查找
  2. 如果没有,就在字符串的常量区创建一个,把指针指向字符串常量区
  3. 如果有,就直接把指针指向字符串的常量区。
  4. 所以,相同内容的字符串指针,其指向的内存地址都是一样的, 但是这个些字符串的指针变量的内存地址则可以是不同的。

关于字符串的存储请看这里

相关文章

  • 关于const 修饰的一些知识

    1、前言 const 修饰的是后面的东西 const修饰的东西不可变 2、验证 1. 代码 2.分析 ** a:c...

  • iOS OC杂文

    1.const const修饰的是其右侧的内容const修饰的是只读的,const *修饰的是指针,所以指针是常量...

  • const,static,extern详解

    一、�const详解 �如果试图修改由const修饰符修饰所声明的变量,编译器会报错。�const修饰符修饰的指针...

  • 浅谈 Const、Exetrn和Static

    Const const修饰常量 被const修饰的属性不能改变: static和exetrn static 在全局...

  • 5.const与指针

    1.const修饰指针-常量指针 2.const修饰常量-指针常量 3.const修饰指针和常量 代码如下

  • 【面试题】写出完整版的strcpy函数

    摘自牛客网: const 关于const修饰指针的情况,分为四种:(摘抄自《程序员面试宝典》49页)const i...

  • 知识小点#1

    1.int const *p和int *const p的区别 被const修饰的内容不可变。1.const修饰的是...

  • C++的const复习

    复习:如何访问静态成员 复习: const 修饰函数参数 复习:const 修饰成员函数(const的作用:说明其...

  • static和const的用法

    [推荐文章]:oscarwin的面试总结 const的作用 const修饰全局变量; const修饰局部变量; c...

  • 你是我的面试吗?iOS开发之const,static,exter

    --- const --- const作用 ·被const修饰的变量是只读的 const的用法 ·const用来修...

网友评论

      本文标题:关于const 修饰的一些知识

      本文链接:https://www.haomeiwen.com/subject/saypxxtx.html