iOS中我們遇到雙指針,通常情況下我們是為erorr賦值例如:- (nullable NSDictionary*)attributesOfItemAtPath:(NSString )path error:(NSError *)error
那么”**”是干什么的呢?我們可以用一句話來描述:
只要看到一個方法的參數(shù)類型是**,此方法就是要給參數(shù)賦值
1.我們先來看一個普通的例子 
輸出為: 
輸出不是456。由此可見這樣賦值是給參數(shù)賦不上值的,因為當(dāng)我們把一個參數(shù)傳到一個方法里面的時候,系統(tǒng)內(nèi)部會做一個事情,系統(tǒng)會拷貝一個指針指向theStr指向的字符串對象。而“str = @”456””代表str這個指針指向了@”456”這個對象。而不是theStr這個指針指向了@”456”。在方法里的指針都是這樣做的。
2.在C語言里我們?yōu)閰?shù)賦值,會傳一個地址作為參數(shù),&符號為取址運算符,&num為num的地址。系統(tǒng)也會拷貝一個指針,但是拷貝的指針指向的是num的地址。下例中*okNum是一個int類型的指針,它指向的是&num(num的地址)。通過修改指針指向的地址達(dá)到修改參數(shù)的目的。

輸出為: 
3.在OC中我們的對象的指針已經(jīng)帶了一個*號,所以就會出現(xiàn)雙指針的情況。*str指向的是*theStr指向的內(nèi)存地址。*str指向了@”456”說明指針 *theStr指向的地址改成了@”456”.及theStr的值變成了@”456”。 
輸出為: 
新聞熱點
疑難解答