二級指針

二級指針,一直是自己比較模糊的存在,直到有天做夢 然後醒來就懂了 嘎嘎

啥都不說了 直接上代碼的

//定義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
發佈了24 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章