Programmation C: lancer un pointeur vide vers un int?
Dire que j'ai un void* nommé ptr. Exactement comment dois-je aller sur l'aide de ptr pour stocker un int? Suffit-il d'écrire
ptr = (void *)5;
Si je veux enregistrer le numéro 5? Ou dois-je malloc quelque chose pour la sauver?
source d'informationauteur Tim | 2011-10-19
Vous devez vous connecter pour publier un commentaire.
Vous êtes casting
5
être un vide pointeur et en l'assignant àptr
.Maintenant ptr points à l'adresse mémoire 0 x 5
Si c'est réellement ce que vous essayez de le faire. eh bien, oui, ça marche. Vous ... ne voulez probablement pas à le faire.
Quand vous dites "stocker un int" je suppose que vous voulez dire que vous souhaitez stocker la valeur de l'entier 5 dans la mémoire pointé par le
void*
. Tant qu'il y a assez de mémoire allouée (sizeof(int)
), vous pouvez le faire avec casting ...Qui fonctionne sur toutes les plateformes et environnements où
sizeof(void*) >= sizeof(int)
ce qui est probablement la plupart d'entre eux, mais je ne pense pas tous d'entre eux. Vous n'êtes pas censé compter sur elle.Si vous pouvez vous devez utiliser une union à la place:
Alors vous pouvez être sûr qu'il y a de l'espace pour s'adapter à chaque type de données et que vous n'avez pas besoin d'un plâtre. (Il suffit de ne pas essayer de déréférencer le pointeur alors que son obtenu non-pointeur de données.)
Sinon, si la raison pour laquelle vous êtes en train de faire ce que vous ont été à l'aide d'un int pour stocker une adresse, vous devez utiliser à la place de
size_t
intptr_t
de sorte que c'est assez grand pour contenir toute la valeur du pointeur sur n'importe quelle plateforme.Un pointeur pointe toujours à une adresse de mémoire. Donc, si vous voulez enregistrer une variable pointeur, ce que vous voulez enregistrer dans le pointeur est l'adresse mémoire de la variable.
La
cast
est suffisant..................