Partager via


Indirection et opérateurs d'adresse

L'opérateur d'indirection (*) accède à une valeur indirectement, via un pointeur.l'opérande doit être une valeur de pointeur.le résultat de l'opération est la valeur adressée par l'opérande ; autrement dit, la valeur à l'adresse laquelle opérande indique.Le type du résultat est le type que les adresses d'opérande.

si les points d'opérande à une fonction, le résultat est un indicateur de fonction.Si elle pointe vers un emplacement de stockage, le résultat est une l-value indiquant l'emplacement de stockage.

Si la valeur du pointeur n'est pas valide, le résultat n'est pas défini.La liste suivante inclut certaines conditions les plus courantes qui invalident une valeur de pointeur.

  • le pointeur est un pointeur null.

  • le pointeur spécifie l'adresse d'un élément local qui n'est pas visible au moment de la référence.

  • Le pointeur spécifie une adresse à laquelle est aligné inappropriée pour le type de l'objet cible.

  • Le pointeur spécifie une adresse non utilisée par le programme en cours de exécution.

L'opérateur d'adresse (&) est l'adresse de son opérande.L'opérande de l'opérateur address-of ne peut être un indicateur de fonction ou une l-value qui pointe vers un objet qui n'est pas un champ de bits et n'est pas déclaré avec le spécificateur de classe de stockage de registre .

Le résultat de l'opération d'adresse est un pointeur vers l'opérande.Le type traité par le pointeur est le type de l'opérande.

L'opérateur address-of ne peut pas être appliqué à des variables avec le principe fondamental, la structure, ou les types union déclarés au niveau de la portée du fichier, ou aux références indicées de tableau.Dans ces expressions, une expression constante qui n'inclut pas l'opérateur address-of ne peut être ajoutée ou soustraite de l'expression d'adresse.

Exemples

les exemples suivants utilisent ces déclarations :

int *pa, x;
int a[20];
double d;

Cette instruction utilise l'opérateur address-of :

pa = &a[5];

L'opérateur d'adresse (&) prend l'adresse du sixième élément du tableau a.Le résultat est stockée dans la variable pointeur pa.

x = *pa;

L'opérateur d'indirection (*) est utilisé dans cet exemple pour accéder à la valeur d' int à l'adresse stockée dans pa.la valeur est assignée à la variable de type entier x.

if( x == *&x )
    printf( "True\n" );

Cet exemple imprime le mot True, illustrant que le résultat de l'opérateur d'indirection à l'adresse d' x est identique à x.

int roundup( void );     /* Function declaration */

int  *proundup  = roundup;
int  *pround  = &roundup;

Une fois la fonction roundup est déclarée, deux pointeurs vers roundup sont déclarés et initialisés.Le premier pointeur, proundup, est initialisé en utilisant seulement le nom de la fonction, tandis que le deuxième, pround, utilise l'opérateur d'adresse à l'initialisation.les initialisations sont équivalentes.

Voir aussi

Référence

Opérateur d'indirection : *

Opérateur address-of : et