你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS中的雙指針

iOS中的雙指針

編輯: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__0xbfffcae4
2__(null)__0x0__0xbfffca64
3____0x8ce9750__0xbfffca64
4__(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__0xbfffcae4
2__(null)__0xbfffcae0__0xbfffca60
3____0xbfffcae0__0xbfffca60
4____0x8cc5bc0__0xbfffcae4


 

 

在我看來,所謂的雙指針就是新建一個對象p ,再創建一個指針p1指向p,然後再創建一個指針p2,p2內保存了p1指針的地址,取得p2指針的內容,就是拿到了p1指針的地址,然後對其的指向進行修改.


 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved