标签:
二级指针,一直是自己比较模糊的存在,直到有天做梦 然后醒来就懂了 嘎嘎
啥都不说了 直接上代码的
//定义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