oc的指標是什麼

2021-07-03 01:34:08 字數 1583 閱讀 2540

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...