码迷,mamicode.com
首页 > 其他好文 > 详细

二级指针

时间:2015-09-15 00:13:15      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

二级指针,一直是自己比较模糊的存在,直到有天做梦 然后醒来就懂了 嘎嘎

啥都不说了 直接上代码的

//定义DBLog
#define DBLog(fmt, ...)   NSLog((@"\nfunction:%s \nline:%d" fmt),__PRETTY_FUNCTION__,__LINE__, ##__VA_ARGS__);
#define DLog(fmt, ...)      NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //二级指针的一般用法
    /**
     * @author 刘俊, 15-08-18
     *
     * 一级指针的传递只是值的传递,虽然在方法中将singlePointArr初始化了(但是在函数中是属于局部变量)
     *     
     *关于一级指针,二级指针的理解,主要:一级指针是对自身值的传递,二级指针是对自己地址的传递,
     *第一种情况中,singlPointArr是一个未初始化的数组,也就是该数组指向一个nil,在传进去initSingleArray中实际是穿了一个nil进去,然后就可以理解为在该函数中实际是对arr数组的初始化,而arr是一个局部变量,出了函数的作用域之后就消失,所以第一个在外面就没有值打印出来
     *第二种情况,虽然还是一个一级指针,但是因为已经初始化了,其指向一个已经开辟内存空间的数组,所以穿进函数中的就是指向这片空间的地址,而在函数中修改arr也就是相当于直接操作修改原来的数组,所以在外面打印的时候,数组是改变的
     *第三种情况是,数组没有舒适化,虽然指向的是一个nil,但是传进函数中的是自己的地址,在函数中直接操作的也就是自己的地址,相当于拿着自己本身在初始化,所以在函数外面打印的是已经初始化的值
     //所以对于必须传得二级指针,外面的变量必须为nil
     */
    NSArray *singlePointArr = nil;
    [self initSingleArray:singlePointArr];
    DBLog(@"\n1. singlePointArr = %@\n point :%p\n\n",singlePointArr,singlePointArr);
    //DLog(@"\n1. singlePointArr = %@\n point :%p",singlePointArr,singlePointArr);
   
    NSMutableArray *singlePointArr1 = @[@"1",@"2",@"3",@"4",@"5"].mutableCopy;
    [self changeSingleArray:singlePointArr1];
    DBLog(@"\n2.changeSingle: %@ \n point:%p \n\n",singlePointArr1,singlePointArr1);
    
    
    NSArray *doublePointArr = nil;
    [self initDoubleArray:&doublePointArr];
    DBLog(@"\n2.doublePointArr = %@\n point:%p \n\n",doublePointArr,doublePointArr);
    
    
    
}


//传一级指针
- (void)initSingleArray:(NSArray *)arr {
    DBLog(@"\n1.%@\n\n",arr);
    arr = @[@"one",@"two"];
    DBLog(@"\n1. arr = %@\n %p\n\n",arr,arr);

}

- (void)changeSingleArray:(NSMutableArray *)arr {
    
    [arr removeLastObject];
    
}

//传二级指针
- (void)initDoubleArray:(NSArray **)arr {
    
    *arr = @[@"1",@"2"];
    DBLog(@"\n2. arr = %@ \n point:%p\n\n",*arr,*arr);
}

@end

二级指针

标签:

原文地址:http://www.cnblogs.com/feiyudexingfu/p/4808406.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!