Imprimer l'adresse ou le pointeur de la valeur dans C
Je veux faire quelque chose qui me semble assez simple. J'obtiens des résultats, mais le problème est que je n'ai aucun moyen de savoir si les résultats sont corrects.
Je travaille en C et j'ai deux pointeurs; je veux imprimer le contenu du pointeur. Je ne veux pas déréférencer le pointeur pour obtenir la valeur pointée, je veux juste l'adresse du pointeur est stocké.
J'ai écrit le code suivant et ce que j'ai besoin de savoir, c'est si c'est juste, et si non, comment puis-je corriger.
/* item one is a parameter and it comes in as: const void* item1 */
const Emp* emp1 = (const Emp*) item1;
printf("\n comp1-> emp1 = %p; item1 = %p \n", emp1, item1 );
Alors que je suis à l'affichage de cette (et la raison pour laquelle il est important qu'il est correct), c'est que finalement, j'ai besoin de faire cela pour un pointeur vers un pointeur. Qui est:
const Emp** emp1 = (const Emp**) item1;
- Ce que vous avez écrit est correct, quel problème rencontrez-vous exactement?
- Comme je l'ai décrit, j'ai été d'obtenir des résultats, mais n'avait aucun moyen de savoir si les résultats étaient corrects ou si il me faisait de la camelote. Ne et autres ci-dessous (ainsi que vous-même) a confirmé que ces résultats sont valables.
Vous devez vous connecter pour publier un commentaire.
Ce que vous avez à faire est correcte. Bien sûr, vous allez voir que emp1 et item1 ont la même valeur de pointeur.
Pour imprimer l'adresse du pointeur de pointeur:
déréférencer une fois, l'imprimer et la deuxième adresse:
Vous pouvez toujours vérifier avec le débogueur, si vous êtes sur linux utiliser
ddd
et de mémoire d'affichage, ou tout simplementgdb
, vous verrez l'adresse de la mémoire de sorte que vous pouvez comparer avec les valeurs des pointeurs.Je crois que ce serait plus correct.
printf()
est un variadic fonction et doit être transmis arguments de la droite les types. Que dit la norme%p
prendvoid *
.void *
est en effet nécessaire.Puisque vous semblent déjà avoir résolu la base adresse de pointeur d'affichage, voici comment vous pourriez vérifier l'adresse d'un double pointeur:
Vous seriez en mesure d'accéder à l'adresse de la double pointeur
a
par:printf("which contains this value: %c\n" **a);
voulais juste ajouter que ^.^.résultat:
J'ai été dans cette position, surtout avec du nouveau matériel. Je vous suggère d'écrire un petit vidage hexadécimal routine de votre propre. Vous serez en mesure de voir les données et les adresses qu'ils sont au, montré tous ensemble. C'est une bonne pratique et un constructeur de confiance.