web-dev-qa-db-fra.com

Imprimer la valeur et l'adresse du pointeur défini dans la fonction?

Je pense que c'est une chose très facile à coder, mais j'ai des problèmes avec la syntaxe en C, je viens de programmer en C++.

#include <stdio.h>
#include <stdlib.h>

void pointerFuncA(int* iptr){
/*Print the value pointed to by iptr*/
printf("Value:  %x\n", &iptr );

/*Print the address pointed to by iptr*/

/*Print the address of iptr itself*/
}

int main(){

void pointerFuncA(int* iptr); 

return 0;
}

Évidemment, ce code n’est qu’un squelette, mais je me demande comment je peux obtenir la communication entre la fonction et le fonctionnement principal, ainsi que la syntaxe pour imprimer l’adresse indiquée et celle de iptr lui-même? Puisque la fonction est vide, comment puis-je envoyer les trois valeurs à main? 

Je pense que l'adresse est quelque chose comme:

printf("Address of iptr variable: %x\n", &iptr );

Je sais que c’est une question simple, mais tous les exemples que j’ai trouvés en ligne n’ont que leur valeur, mais c’est ce qui a été défini comme suit: 

int iptr = 0;

Aurais-je besoin de créer une valeur arbitraire? 

Merci!

7
austinscode

Lire les commentaires

#include <stdio.h>
#include <stdlib.h>

void pointerFuncA(int* iptr){
/*Print the value pointed to by iptr*/
printf("Value:  %d\n", *iptr );

/*Print the address pointed to by iptr*/
printf("Value:  %p\n", iptr );

/*Print the address of iptr itself*/
printf("Value:  %p\n", &iptr );
}

int main(){
int i = 1234; //Create a variable to get the address of
int* foo = &i; //Get the address of the variable named i and pass it to the integer pointer named foo
pointerFuncA(foo); //Pass foo to the function. See I removed void here because we are not declaring a function, but calling it.

return 0;
}

Sortie:

Value:  1234
Value:  0xffe2ac6c
Value:  0xffe2ac44
12
Atahan Acar

Pour accéder à la valeur pointée par un pointeur, vous devez utiliser l'opérateur d'indirection *.

Pour imprimer le pointeur lui-même, il suffit d’accéder à la variable pointeur sans opérateur.

Et pour obtenir l'adresse de la variable de pointeur, utilisez l'opérateur &.

void pointerFuncA(int* iptr){
    /*Print the value pointed to by iptr*/
    printf("Value:  %x\n", *iptr );

    /*Print the address pointed to by iptr*/
    printf("Address of value: %p\n", (void*)iptr);

    /*Print the address of iptr itself*/
    printf("Address of iptr: %p\n", (void*)&iptr);
}

L'opérateur de formatage %p requiert l'argument correspondant à void*; il est donc nécessaire de convertir les pointeurs vers ce type.

6
Barmar

int* iptr est déjà un pointeur, vous n'avez donc pas besoin du & devant pour l'écrire

printf("Address of iptr variable: %x\n", &iptr );

Voici comment imprimer une valeur de pointeur.

printf("Address of iptr variable: %p\n", (void*)iptr);

De plus, vous avez le prototype de fonction pour pointerFuncA() au mauvais endroit, étant à l'intérieur de main(). Il devrait être en dehors de toute fonction avant d'être appelée.

1
Weather Vane
#include <stdio.h>
#include <stdlib.h>

void pointerFuncA(int* iptr){
/*Print the value pointed to by iptr*/
printf("Value:  %p\n", (void*) iptr );

/*Print the address pointed to by iptr*/

/*Print the address of iptr itself*/
}

int main(){
int iptr = 0;
pointerFuncA( &iptr); 

return 0;
}

Je pense que vous regardez quelque chose comme ceci, il n'est pas nécessaire de redéfinir la fonction à nouveau dans le principal ...

1
Samer

Address sont des valeurs de mémoire écrites en notation hexadécimale commençant par 0x

/ Valeur pointée par le pointeur iptr /

printf("Value is: %i", *iptr);

L'adresse pointée par le pointeur sera la valeur du pointeur iptr lui-même

/ affiche l'adresse indiquée par l'iptr /

 printf("Address is: %p", iprt);

/ affiche l'adresse de l'iptr lui-même /

 printf("Address of iptr: %p", &iptr )
1
mukki