Assigner un pointeur à un entier

Puis-je affecter un pointeur à une variable entière? Comme la suivante.

int *pointer; int array1[25]; int addressOfArray; pointer = &array1[0]; addressOfArray = pointer; 

Est-il possible de faire comme ça?

    Non sans dissortingbution explicite, c’est-à-dire

     addressOfArray = (int) pointer; 

    Il y a aussi cette mise en garde:

    6.3.2.3 Pointeurs

    6 Tout type de pointeur peut être converti en un type entier. Sauf indication contraire, le résultat est défini par l’implémentation. Si le résultat ne peut pas être représenté dans le type entier, le comportement est indéfini. Le résultat ne doit pas forcément être compris dans la plage de valeurs d’un type entier.

    Donc, le résultat n’est pas garanti d’être une valeur entière significative.

    Non, il n’est pas valide d’affecter un pointeur à un entier. C’est une violation de contrainte de l’opérateur d’affectation (C99, 6.5.16.1p1). Un compilateur a le droit de refuser de traduire un programme comportant un pointeur sur un entier.

    Cela se fait fréquemment dans la programmation intégrée avec quelques réserves:

    • l’opération (le plus probable) nécessite un casting, et
    • implique généralement que vous travaillez sans système d’exploitation ou que vous travaillez très étroitement avec le RTOS (développement au niveau du pilote)

    Nan.

    Vous tentez d’affecter une valeur “pointeur sur int” à une variable “int”. Vous obtiendrez un avertissement du compilateur à coup sûr. Vous pourriez faire:

     int *pointer; int array1[25]; int *addressOfArray; pointer = &array1[0]; //The following commented lines are equivalent to the pointer assignment above and are also valid //pointer = array //pointer = &array[0] addressOfArray = pointer; 

    Ceci est connu comme une copie superficielle. Si vous n’êtes pas déjà familiarisé avec le concept, je vous recommande fortement de le lire (Google “Copie en profondeur / superficielle”).

    Vous pouvez le faire comme ceci:

     memcpy(&addressOfArray, &pointer, sizeof(int)); 

    Ce qui copierait directement les octets sous-jacents et supplanterait l’opérateur de diffusion, mais je ne le recommanderais certainement pas, à moins que vous ne soyez sûr de ce que sizeof(int) == sizeof(int *) sur votre système.