Déclarations de pointeurs

De RAD Studio
Aller à : navigation, rechercher

Remonter à Pointeurs - Index

Un pointeur doit pointer un type particulier de données, même s'il s'agit du type void (qui désigne en réalité un pointeur sur n'importe quoi). Une fois déclaré, le pointeur peut généralement être réaffecté pour pointer un objet d'un autre type. Le compilateur permet de réaffecter les pointeurs sans transtypage, mais il affiche un message d'avertissement, à moins que le pointeur n'ait été déclaré à l'origine comme étant void. En C (mais pas en C++), vous pouvez affecter un pointeur void* à un pointeur non void*. Voir void pour plus de détails.

Avertissement : Les pointeurs doivent être initialisés avant d'être utilisés.

Si type est un type prédéfini ou défini par le programmeur (y compris void), la déclaration



 type *ptr;   /* Pointeur non initialisé */



déclare que ptr est un "pointeur sur type". Toutes les règles de portée, durée de vie et visibilité s'appliquent à l'objet ptr.

Pour un pointeur, une valeur NULL est une adresse assurée d'être différente de tout autre pointeur valide utilisé dans le programme. L'affectation de la constante entière 0 à un pointeur attribue une valeur NULL au pointeur.

Le mnémonique NULL (défini dans les fichiers en-tête de la bibliothèque standard, comme stdio.h) améliore la lisibilité des sources. Tous les pointeurs peuvent être testés pour contrôler s'ils sont égaux ou non à NULL.

Ne confondez pas "pointeur sur void" avec le pointeur NULL. La déclaration



 void *vptr;



revient à dire que vptr est un pointeur générique qui peut faire l'objet d'une affectation par une quelconque valeur "pointeur sur type", y compris la valeur NULL. Les affectations sans transtypage entre un "pointeur sur type1" et un "pointeur sur type2", où type1 et type2 sont différents, peuvent entraîner une erreur ou un avertissement du compilateur. Si type1 est une fonction et type2 ne l'est pas (ou inversement), les affectations de pointeurs sont illégales. Si type1 est un pointeur sur void, aucun transtypage n'est nécessaire. Dans C, si type2 est un pointeur sur void, aucun transtypage n'est nécessaire.