webentwicklung-frage-antwort-db.com.de

Wie werden variable Adressen in C gedruckt?

Wenn ich diesen Code laufen lasse. 

#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);
}

Ich erhalte diesen Fehler immer wieder in meinem Compiler.

/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 *’

Kannst du mir helfen?

Vielen Dank

blargman

39
nambvarun

Sie möchten %p verwenden, um einen Zeiger zu drucken. Aus der Spezifikation:

pDas Argument soll ein Zeiger aufvoidsein. Der Wert des Zeigers wird auf implementierungsdefinierte Weise in eine Folge von Druckzeichen konvertiert.

Und vergessen Sie nicht die Besetzung, z.

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

Wenn Sie beabsichtigen, die Speicheradresse einer Variablen oder eines Zeigers auszudrucken, wird die Verwendung von %d nicht ausgeführt und führt zu Kompilierungsfehlern, da Sie versuchen, anstelle der Adresse eine Zahl zu drucken Wenn Sie arbeiten, hätten Sie einen absichtlichen Fehler, weil eine Speicheradresse keine Zahl ist. Der Wert 0xbfc0d878 ist sicherlich keine Zahl, sondern eine Adresse.

Was Sie verwenden sollten, ist %p. z.B.,

#include<stdio.h>

int main(void) {

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

Viel Glück!

5
Ron Nuni

Um die Adresse einer Variablen zu drucken, müssen Sie das %p-Format verwenden. %d ist für vorzeichenbehaftete Ganzzahlen. Zum Beispiel:

#include<stdio.h>

void main(void)
{
  int a;

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

Sieht aus wie% p: Zeiger drucken

0
skaz