Was ist ein Doppelstern (z. B. NSError **)?

Was ist ein Doppelstern (z. B. NSError **)?


Also, ich habe das gesehen:


error:(NSError **)error

in der Apple-Dokumentation. Warum zwei Sterne? Was ist die Bedeutung?


Antworten:


Ein "Doppelstern" ist ein Zeiger auf einen Zeiger. Also NSError ** ist ein Zeiger auf einen Zeiger auf ein Objekt vom Typ NSError . Es erlaubt Ihnen grundsätzlich, ein Fehlerobjekt von der Funktion zurückzugeben. Sie können einen Zeiger auf einen NSError erstellen Objekt in Ihrer Funktion (nennen Sie es *myError ), und dann etwa so:


*error = myError;

um diesen Fehler an den Aufrufer "zurückzugeben".



Als Antwort auf einen unten geposteten Kommentar:


Sie können nicht einfach einen NSError * verwenden denn in C werden Funktionsparameter per Wert übergeben – das heißt, die Werte werden kopiert bei Übergabe an eine Funktion. Betrachten Sie zur Veranschaulichung dieses Stück C-Code:


void f(int x)
{
x = 4;
}
void g(void)
{
int y = 10;
f(y);
printf("%d\n", y); // Will output "10"
}

Die Neuzuweisung von x in f() wirkt sich nicht auf den Wert des Arguments außerhalb von f() aus (in g() , zum Beispiel).


Wenn ein Zeiger an eine Funktion übergeben wird, wird sein Wert kopiert, und eine Neuzuweisung wirkt sich nicht auf den Wert außerhalb der Funktion aus.


void f(int *x)
{
x = 10;
}
void g(void)
{
int y = 10;
int *z = &y;
printf("%p\n", z); // Will print the value of z, which is the address of y
f(z);
printf("%p\n", z); // The value of z has not changed!
}

Natürlich wissen wir, dass wir den Wert von z ändern können weist ziemlich einfach auf:


void f(int *x)
{
*x = 20;
}
void g(void)
{
int y = 10;
int *z = &y;
printf("%d\n", y); // Will print "10"
f(z);
printf("%d\n", y); // Will print "20"
}

Es liegt also nahe, den Wert von was einem NSError * zu ändern zeigt, müssen wir auch einen Zeiger auf den Zeiger übergeben.