web-dev-qa-db-fra.com

Comment imprimer les adresses variables en C?

Quand je lance ce code. 

#include <stdio.h>

void moo(int a, int *b);

int main()
{
    int x;
    int *y;

    x = 1;
    y = &x;

    printf("Address of x = %d, value of x = %d\n", &x, x);
    printf("Address of y = &d, value of y = %d, value of *y = %d\n", &y, y, *y);
    moo(9, y);
}

void moo(int a, int *b)
{
    printf("Address of a = %d, value of a = %d\n", &a, a);
    printf("Address of b = %d, value of b = %d, value of *b = %d\n", &b, b, *b);
}

Je continue à avoir cette erreur dans mon compilateur.

/Volumes/MY USB/C Programming/Practice/addresses.c:16: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
/Volumes/MY USB/C Programming/Practice/addresses.c:17: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int **’
/Volumes/MY USB/C Programming/Practice/addresses.c:17: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘int *’
/Volumes/MY USB/C Programming/Practice/addresses.c: In function ‘moo’:
/Volumes/MY USB/C Programming/Practice/addresses.c:23: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
/Volumes/MY USB/C Programming/Practice/addresses.c:24: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int **’
/Volumes/MY USB/C Programming/Practice/addresses.c:24: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘int *’

Pourriez-vous m'aider?

Merci

blargman

39
nambvarun

Vous voulez utiliser %p pour imprimer un pointeur. De la spec:

pL'argument doit être un pointeur survoid. La valeur du pointeur est convertie en une séquence de caractères d'impression, d'une manière définie par l'implémentation.

Et n'oubliez pas le casting, par exemple.

printf("%p\n",(void*)&a);
78
Carl Norum

Lorsque vous avez l'intention d'imprimer l'adresse mémoire d'une variable ou d'un pointeur, utiliser %d ne fera pas l'affaire et provoquera des erreurs de compilation, car vous essayez d'imprimer un nombre au lieu d'une adresse travail, vous auriez une erreur d’intention, car une adresse mémoire n’est pas un nombre. la valeur 0xbfc0d878 n'est sûrement pas un nombre, mais une adresse.

Ce que vous devriez utiliser est %p. par exemple.,

#include<stdio.h>

int main(void) {

    int a;
    a = 5;
    printf("The memory address of a is: %p\n", (void*) &a);
    return 0;
}

Bonne chance!

5
Ron Nuni

Pour imprimer l'adresse d'une variable, vous devez utiliser le format %p. %d est pour les entiers signés. Par exemple:

#include<stdio.h>

void main(void)
{
  int a;

  printf("Address is %p:",&a);
}
1
Amarendra Deo

On dirait que vous utilisez% p: Pointeurs d'impression

0
skaz