Ziel-C-Zeiger
Zeiger in Objective-C sind einfach und machen Spaß zu lernen. Einige Objective-C-Programmieraufgaben lassen sich einfacher mit Zeigern ausführen, und andere Aufgaben, z. B. die dynamische Speicherzuweisung, können nicht ohne Verwendung von Zeigern ausgeführt werden. Es wird also notwendig, Zeiger zu lernen, um ein perfekter Objective-C-Programmierer zu werden. Beginnen wir damit, sie in einfachen Schritten zu lernen.
Wie Sie wissen, ist jede Variable ein Speicherort, und für jeden Speicherort ist eine Adresse definiert, auf die mit dem kaufmännischen Und (&) -Operator zugegriffen werden kann, der eine Adresse im Speicher angibt. Betrachten Sie das folgende Beispiel, in dem die Adresse der definierten Variablen gedruckt wird:
#import <Foundation/Foundation.h>
int main () {
int var1;
char var2[10];
NSLog(@"Address of var1 variable: %x\n", &var1 );
NSLog(@"Address of var2 variable: %x\n", &var2 );
return 0;
}
Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das Ergebnis wie folgt:
2013-09-13 03:18:45.727 demo[17552] Address of var1 variable: 1c0843fc
2013-09-13 03:18:45.728 demo[17552] Address of var2 variable: 1c0843f0
Sie haben also verstanden, was Speicheradresse ist und wie Sie darauf zugreifen können. Die Basis des Konzepts ist also vorbei. Lassen Sie uns nun sehen, was ein Zeiger ist.
Was sind Zeiger?
EIN pointerist eine Variable, deren Wert die Adresse einer anderen Variablen ist, dh die direkte Adresse des Speicherorts. Wie bei jeder Variablen oder Konstante müssen Sie einen Zeiger deklarieren, bevor Sie ihn zum Speichern einer Variablenadresse verwenden können. Die allgemeine Form einer Zeigervariablendeklaration lautet -
type *var-name;
Hier, typeist der Basistyp des Zeigers; Es muss ein gültiger Objective-C-Datentyp sein undvar-nameist der Name der Zeigervariable. Das Sternchen *, mit dem Sie einen Zeiger deklariert haben, ist das gleiche Sternchen, das Sie für die Multiplikation verwenden. In dieser Anweisung wird das Sternchen jedoch verwendet, um eine Variable als Zeiger zu kennzeichnen. Es folgen die gültigen Zeigerdeklarationen -
int *ip; /* pointer to an integer */
double *dp; /* pointer to a double */
float *fp; /* pointer to a float */
char *ch /* pointer to a character */
Der tatsächliche Datentyp des Werts aller Zeiger, ob Ganzzahl, Gleitkomma, Zeichen oder auf andere Weise, ist derselbe, eine lange Hexadezimalzahl, die eine Speicheradresse darstellt. Der einzige Unterschied zwischen Zeigern verschiedener Datentypen ist der Datentyp der Variablen oder Konstante, auf die der Zeiger zeigt.
Wie benutze ich Zeiger?
Es gibt nur wenige wichtige Operationen, die wir sehr häufig mit Hilfe von Zeigern ausführen werden. (a) wir definieren eine Zeigervariable, (b) Weisen Sie einem Zeiger die Adresse einer Variablen zu, und (c)Greifen Sie schließlich auf den Wert an der Adresse zu, die in der Zeigervariablen verfügbar ist. Dies erfolgt mit einem unären Operator*Dies gibt den Wert der Variablen zurück, die sich an der durch ihren Operanden angegebenen Adresse befindet. Das folgende Beispiel verwendet diese Operationen -
#import <Foundation/Foundation.h>
int main () {
int var = 20; /* actual variable declaration */
int *ip; /* pointer variable declaration */
ip = &var; /* store address of var in pointer variable*/
NSLog(@"Address of var variable: %x\n", &var );
/* address stored in pointer variable */
NSLog(@"Address stored in ip variable: %x\n", ip );
/* access the value using the pointer */
NSLog(@"Value of *ip variable: %d\n", *ip );
return 0;
}
Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das Ergebnis wie folgt:
2013-09-13 03:20:21.873 demo[24179] Address of var variable: 337ed41c
2013-09-13 03:20:21.873 demo[24179] Address stored in ip variable: 337ed41c
2013-09-13 03:20:21.874 demo[24179] Value of *ip variable: 20
NULL-Zeiger in Ziel-C
Es wird immer empfohlen, einer Zeigervariablen einen NULL-Wert zuzuweisen, falls Sie keine genaue Adresse haben, die zugewiesen werden soll. Dies erfolgt zum Zeitpunkt der Variablendeklaration. Ein Zeiger, dem NULL zugewiesen ist, heißt anull Zeiger.
Der NULL-Zeiger ist eine Konstante mit dem Wert Null, die in mehreren Standardbibliotheken definiert ist. Betrachten Sie das folgende Programm -
#import <Foundation/Foundation.h>
int main () {
int *ptr = NULL;
NSLog(@"The value of ptr is : %x\n", ptr );
return 0;
}
Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:
2013-09-13 03:21:19.447 demo[28027] The value of ptr is : 0
Auf den meisten Betriebssystemen dürfen Programme unter der Adresse 0 nicht auf den Speicher zugreifen, da dieser Speicher vom Betriebssystem reserviert wird. Die Speicheradresse 0 hat jedoch eine besondere Bedeutung; es signalisiert, dass der Zeiger nicht auf einen zugänglichen Speicherort zeigen soll. Wenn ein Zeiger jedoch den Wert Null (Null) enthält, wird angenommen, dass er auf nichts zeigt.
Um nach einem Nullzeiger zu suchen, können Sie eine if-Anweisung wie folgt verwenden:
if(ptr) /* succeeds if p is not null */
if(!ptr) /* succeeds if p is null */
Ziel-C-Zeiger im Detail
Zeiger haben viele, aber einfache Konzepte und sind für die Objective-C-Programmierung sehr wichtig. Es gibt einige wichtige Zeigerkonzepte, die einem Objective-C-Programmierer klar sein sollten:
Sr.Nr. | Konzept & Beschreibung |
---|---|
1 | Ziel-C - Zeigerarithmetik Es gibt vier arithmetische Operatoren, die für Zeiger verwendet werden können: ++, -, +, - |
2 | Objective-C - Array von Zeigern Sie können Arrays definieren, die eine Reihe von Zeigern enthalten. |
3 | Ziel-C - Zeiger auf Zeiger Mit Objective-C können Sie einen Zeiger auf einen Zeiger usw. setzen. |
4 | Übergeben von Zeigern an Funktionen in Objective-C Durch Übergeben eines Arguments als Referenz oder als Adresse kann das übergebene Argument in der aufrufenden Funktion von der aufgerufenen Funktion geändert werden. |
5 | Zeiger von Funktionen in Objective-C zurückgeben Mit Objective-C kann eine Funktion einen Zeiger auf eine lokale Variable, eine statische Variable und einen dynamisch zugewiesenen Speicher zurückgeben. |