iOS中的雙指標
二級指標:也叫雙指標,指標的指標用作參數,大多用在需 要函數改變該指標的指向時 代碼目的是setPeople方法執行後,people指標指向了一個新 建立的people對象。
一級指標
ZYPeople *people=nil;NSLog(@1__%@__%p__%p,people,people,&people);[self setPeople:people];NSLog(@4__%@__%p__%p,people,people,&people);-(void)setPeople:(ZYPeople *)people2{NSLog(@2__%@__%p__%p,people2,people2,&people2);people2=[[ZYPeople alloc] init];NSLog(@3__%@__%p__%p,people2,people2,&people2);}
}log輸出如下:
1__(null)__0x0__0xbfffcae42__(null)__0x0__0xbfffca643____0x8ce9750__0xbfffca644__(null)__0x0__0xbfffcae4
概述:
people為一個指標,可以直接使用這個指標所儲存的記憶體地 址,又可以使用這個地址裡儲存的值。 指標是一種資料類型,與其它的資料類型不同的是指標是一 種“用來存放地址值”的變數%p 一般以十六進位整數方式輸出指標的值 &取地址符號:&後面跟變數標識符即可獲得變數的記憶體位址 指標雖然很小 但還是佔一些記憶體,也有自己的記憶體位址log中列印了3項:指標指向地址中的值(對象)、指標的值 (對象地址)、指標的地址
分析:2和1中的對象內容、指標的值都一樣,只有指標本身 的地址不 一樣,兩個指標指向了同一塊地址,但是這兩個指標本身的 地址不同,這是兩個不同的指標變數。 在函數的參數傳遞中,編譯器會為函數的每個參數製作臨時 副本。
此處people2就是people的副本; 3、people2指標指向了一個新建立的ZYPeople對象的地址 輸出了指標指向地址中的值(對象)、指標的值(對象地 址)、指標的地址
4、和1一樣
因為在函數的參數傳遞中,編譯器會為函數的每個參數製作 臨時副本(也就是拷貝指標)。所以people2在方法中賦值, 與外部的people沒關係 實現不了目的
二級指標
ZYPeople *people=nil;NSLog(@1__%@__%p__%p,people,people,&people);[self setPeople:&people];NSLog(@4__%@__%p__%p,people,people,&people); -(void)setPeople:(ZYPeople **)people2{NSLog(@2__%@__%p__%p,*people2,people2,&people2); *people2=[[ZYPeople alloc] init]; NSLog(@3__%@__%p__%p,*people2,people2,&people2);}
log輸出如下
1__(null)__0x0__0xbfffcae42__(null)__0xbfffcae0__0xbfffca603____0xbfffcae0__0xbfffca604____0x8cc5bc0__0xbfffcae4
在我看來,所謂的雙指標就是建立一個對象p ,再建立一個指標p1指向p,然後再建立一個指標p2,p2內儲存了p1指標的地址,取得p2指標的內容,就是拿到了p1指標的地址,然後對其的指向進行修改.