nserror *error = nil;
bool result = [object performoperationwitherror:&error];
該方法的宣告為:- (bool)performoperationwitherror:(nserror **)error;
之前一直這樣用,也沒去深入了解為什麼要這樣用,今天就來解決一下這個問題。
在c語言中,我們會這樣使用指標:
int a = 10, *p1, *p2;
p1 = &a;
p2 = p1;
p1指的是變數a所在的位址。*p1指的是p1指向的位址的值,即a的值。&a指的是變數a的位址。而oc中的指標跟c語言中的指標是一樣的。
在oc中,當我們alloc、init乙個物件以後,要訪問物件一般直接使用物件的名字,如:
myclass *obj = [[myclass alloc]init];
nslog(@"obj:%p", obj);
nslog(@"&obj:%p", &obj);
輸出為:
obj是乙個指標變數,它指向obj物件的位址。&obj指的是obj這個指標變數所在的位址。
下面分別來看下obj、&obj的記憶體位址。
理解了oc指標的概念以後,我們再回到最上面的那段**。不用往上翻,我搬下來了。
nserror *error = nil;
bool result = [object performoperationwitherror:&error];
該方法的宣告為:- (bool)performoperationwitherror:](nserror **)error;
這裡為什麼要把&error作為引數呢?因為這是乙個引用傳遞,把error的位址傳進方法裡後,方法外的error的值會隨著方法裡的error的改變而改變,類似於c語言中把指標作為引數傳進函式中。而為什麼傳的不是error而是&error呢?通過上面的研究,我們知道error的值是error指向的物件的位址,&error的值是error指標變數的位址。我們可以看到performoperationwitherror:方法的引數是(nserror **)error,說明該引數是乙個二級指標,它接收的是乙個指標變數的位址,而不是乙個物件的位址(指標變數指向的位址)(如果接收物件位址,一般是這樣寫:(nserror *)error),因此傳進去的必須是&error。 野指標是什麼
野指標問題 神馬是野指標?來的?有什麼危害?1 野指標,就是指標指向的位置是不可知的 隨機的 不正確的 沒有明確限制的 2 野指標很可能觸發執行時段錯誤 sgmentation fault 3 因為指標變數在定義時如果未初始化,值也是隨機的。指標變數的值其實就是別的變數 指標所指向的那個變數 的位址...
指標 指標是什麼,指標和指標的型別
指標 pointer 是程式語言中的乙個物件,利用位址,它的值直接指向 pointed to 存在電腦儲存器中另乙個地方的值。也就是通過位址可以找到所需的變數單元,可以說,位址指向該變數單元。舉例說明 include include int main 總結一下,其實指標就是變數,用來存放位址的變數 ...
C 中指標是什麼?
以下問題都是我在學習c 的指標時比較淺顯的一些個人的理解 1 什麼是指標?回答這個問題之前,先想想什麼是記憶體位址?我們在程式中定義乙個變數,系統會自動分配乙個記憶體位址,在c 中位址可以通過 變數名 這種格式來獲取。指標其實也是一種型別,像int char一樣,只不過指標變數存放的是記憶體位址 2...