Pointeurs Objective-C

Les pointeurs d'Objective-C sont faciles et amusants à apprendre. Certaines tâches de programmation Objective-C sont exécutées plus facilement avec des pointeurs, et d'autres tâches, telles que l'allocation de mémoire dynamique, ne peuvent pas être effectuées sans l'utilisation de pointeurs. Il devient donc nécessaire d'apprendre les pointeurs pour devenir un parfait programmeur Objective-C. Commençons à les apprendre par étapes simples et faciles.

Comme vous le savez, chaque variable est un emplacement de mémoire et chaque emplacement de mémoire a son adresse définie, accessible à l'aide de l'opérateur perluète (&), qui indique une adresse en mémoire. Prenons l'exemple suivant, qui affichera l'adresse des variables définies -

#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;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat comme suit -

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

Donc, vous avez compris ce qu'est l'adresse mémoire et comment y accéder, donc la base du concept est terminée. Voyons maintenant ce qu'est un pointeur.

Que sont les pointeurs?

UNE pointerest une variable dont la valeur est l'adresse d'une autre variable, c'est-à-dire l'adresse directe de l'emplacement mémoire. Comme toute variable ou constante, vous devez déclarer un pointeur avant de pouvoir l'utiliser pour stocker une adresse de variable. La forme générale d'une déclaration de variable de pointeur est -

type *var-name;

Ici, typeest le type de base du pointeur; il doit s'agir d'un type de données Objective-C valide etvar-nameest le nom de la variable du pointeur. L'astérisque * que vous avez utilisé pour déclarer un pointeur est le même astérisque que vous utilisez pour la multiplication. Cependant, dans cette instruction, l'astérisque est utilisé pour désigner une variable comme pointeur. Voici la déclaration de pointeur valide -

int    *ip;    /* pointer to an integer */
double *dp;    /* pointer to a double */
float  *fp;    /* pointer to a float */
char   *ch     /* pointer to a character */

Le type de données réel de la valeur de tous les pointeurs, qu'il soit entier, flottant, caractère ou autre, est le même, un long nombre hexadécimal qui représente une adresse mémoire. La seule différence entre les pointeurs de différents types de données est le type de données de la variable ou de la constante vers laquelle pointe le pointeur.

Comment utiliser les pointeurs?

Il y a peu d'opérations importantes, que nous ferons très fréquemment à l'aide de pointeurs. (a) on définit une variable de pointeur, (b) affecter l'adresse d'une variable à un pointeur, et (c)enfin accéder à la valeur à l'adresse disponible dans la variable pointeur. Ceci est fait en utilisant un opérateur unaire*qui renvoie la valeur de la variable située à l'adresse spécifiée par son opérande. L'exemple suivant utilise ces opérations -

#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;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat comme suit -

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

Pointeurs NULL en Objective-C

Il est toujours recommandé d'attribuer une valeur NULL à une variable de pointeur au cas où vous n'auriez pas d'adresse exacte à attribuer. Cela se fait au moment de la déclaration des variables. Un pointeur qui est assigné NULL est appelé unnull aiguille.

Le pointeur NULL est une constante avec une valeur de zéro définie dans plusieurs bibliothèques standard. Considérez le programme suivant -

#import <Foundation/Foundation.h>

int main () {
   int  *ptr = NULL;
   NSLog(@"The value of ptr is : %x\n", ptr  );
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

2013-09-13 03:21:19.447 demo[28027] The value of ptr is : 0

Sur la plupart des systèmes d'exploitation, les programmes ne sont pas autorisés à accéder à la mémoire à l'adresse 0 car cette mémoire est réservée par le système d'exploitation. Cependant, l'adresse mémoire 0 a une signification particulière; il signale que le pointeur n'est pas destiné à pointer vers un emplacement mémoire accessible. Mais par convention, si un pointeur contient la valeur nulle (zéro), il est supposé ne pointer vers rien.

Pour rechercher un pointeur nul, vous pouvez utiliser une instruction if comme suit -

if(ptr)     /* succeeds if p is not null */
if(!ptr)    /* succeeds if p is null */

Pointeurs Objective-C en détail

Les pointeurs ont des concepts nombreux mais simples et ils sont très importants pour la programmation Objective-C. Voici quelques concepts de pointeurs importants, qui devraient être clairs pour un programmeur Objective-C -

N ° Sr. Concept et description
1 Objective-C - Arithmétique du pointeur

Il existe quatre opérateurs arithmétiques qui peuvent être utilisés sur les pointeurs: ++, -, +, -

2 Objective-C - Tableau de pointeurs

Vous pouvez définir des tableaux pour contenir un certain nombre de pointeurs.

3 Objective-C - Pointeur vers pointeur

Objective-C vous permet d'avoir un pointeur sur un pointeur et ainsi de suite.

4 Passer des pointeurs vers des fonctions en Objective-C

Le passage d'un argument par référence ou par adresse permet tous deux de modifier l'argument passé dans la fonction appelante par la fonction appelée.

5 Renvoyer le pointeur des fonctions en Objective-C

Objective-C permet à une fonction de renvoyer un pointeur vers une variable locale, une variable statique et une mémoire allouée dynamiquement.