美文网首页
对于Const的理解

对于Const的理解

作者: 西门淋雨 | 来源:发表于2018-09-02 22:54 被阅读16次

    让我们一起奔跑吧:


    IMG_2006.JPG

    直接上代码,注释也很详细:

    //
    //  TestConstVC.m
    //  OCProject
    //
    //  Created by wqq on 2018/9/2.
    //  Copyright © 2018年 wqq. All rights reserved.
    //
    
    #import "TestConstVC.h"
    
    @interface TestConstVC ()
    
    @end
    
    @implementation TestConstVC
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.view.backgroundColor = [UIColor whiteColor];
        
        int a = 10;
        a = 20;
        
        //下面两种写法一样,const 均修饰右边的变量
        int const b = 10;
        const int b2 = 10;
        //b = 20//会报错,不允许修改
    
        int *p = &a;
        int c = 20;
        p = &c;
       
        //下面的两种写法一样
        const int *d = p;
        NSLog(@"d===%p",d);
        int const *e = p;
        NSLog(@"d===%p",e);
        //d 和 e的值是一样的
        //*d = 20;//会报错
        //上述const修饰的是(*d)和(*e),所以*d 和 *e的值(指针指向的地址存贮的值)不能修改,但是e和d两个指针变量的值可以修改。
        d = &b;
        e = &b;
        
        
        int * const f = &a;
        NSLog(@"f===%p",f);
        //f = &a;//报错,不能修改f的值
        
        //下面的两种写法一样
        const int *const k = &c;
        NSLog(@"k===%p",k);
        int const *const j = &c;
        NSLog(@"j===%p",j);
    //    k = &b;//报错
    //    *k = 80;//报错
    //    j = &b;//报错
    //    *j = 80;//报错
        //上述的两种写法是一样的,第一个const修改的是*k和*j,所以*k和*j不能修改,第二个const修饰的是变量k和j(k和j都是指针变量,他们的值也不能修改)
        
        [self test:&a];
        
        [self test2:&a];
    }
    - (void)test:(const int *)ak{
        NSLog(@"ak===%p",ak);
        //*ak = 100;//会报错,const修饰的是(*ak),即 指针变量指向的内存空间存贮的值不能修改
        int o = 100;
        ak = &o;//但是可以修改指针的值
        NSLog(@"ak===%p",ak);
    }
    - (void)test2:(int *const)bk{
        int pp = 100;
        //bk = &pp;//报错,const修饰的是bk指针
        *bk = pp;//但是可以修改bk指针指向的空间存储的值
    }
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
    }
    @end
    
    

    相关文章

      网友评论

          本文标题:对于Const的理解

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