wake-up-neo.net

Geben Sie die Adresse oder den Zeiger für den Wert in C aus

Ich möchte etwas tun, das ziemlich einfach zu sein scheint. Ich erhalte Ergebnisse, aber das Problem ist, dass ich nicht wissen kann, ob die Ergebnisse korrekt sind.

Ich arbeite in C und habe zwei Zeiger; Ich möchte den Inhalt des Zeigers drucken. Ich möchte den Zeiger nicht dereferenzieren, um den Wert zu erhalten, auf den verwiesen wird. Ich möchte nur die Adresse, die der Zeiger gespeichert hat.

Ich habe den folgenden Code geschrieben und muss wissen, ob er richtig ist, und wenn nicht, wie ich ihn korrigieren kann.

/* 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 );

Während ich dies poste (und der Grund, warum es wichtig ist, dass es korrekt ist), muss ich dies eventuell für einen Zeiger auf einen Zeiger tun. Das ist:

const Emp** emp1 = (const Emp**) item1; 
77
Frank V

Was Sie haben, ist richtig. Natürlich werden Sie feststellen, dass emp1 und item1 denselben Zeigerwert haben.

29
Don Neufeld

So drucken Sie eine Adresse in einem Zeiger auf einen Zeiger:

printf("%p",emp1)

einmal dereferenzieren und die zweite Adresse ausdrucken:

printf("%p",*emp1)

Sie können immer mit dem Debugger überprüfen, ob Sie unter Linux ddd verwenden und den Speicher anzeigen, oder einfach gdb, Sie sehen die Speicheradresse, damit Sie sie mit den Werten in Ihren Zeigern vergleichen können.

38
stefanB

Ich glaube, das wäre am richtigsten.

printf("%p", (void *)emp1);
printf("%p", (void *)*emp1);

printf() ist eine variable Funktion und es müssen Argumente des richtigen Typs übergeben werden. Der Standard besagt, dass %pvoid * Benötigt.

14
sigjuice

Da Sie die grundlegende Anzeige der Zeigeradresse anscheinend bereits gelöst haben, können Sie die Adresse eines Doppelzeigers folgendermaßen überprüfen:

char **a;
char *b;
char c = 'H';

b = &c;
a = &b;

Sie können auf die Adresse des Doppelzeigers a zugreifen, indem Sie Folgendes ausführen:

printf("a points at this memory location: %p", a);
printf("which points at this other memory location: %p", *a);
9
Luca Matteis
char c = 'A';
printf("ptr: %p,\t value: %c,\t and also address: %zu",&c, c,&c);

ergebnis:

ptr: 0xbfb4027f, value: A und außerdem address: 3216245375

4
4pie0

Ich war in dieser Position, vor allem mit neuer Hardware. Ich schlage vor, Sie schreiben eine eigene kleine Hex-Dump-Routine. Sie können die Daten und die Adressen sehen, unter denen sie sich befinden. Es ist eine gute Praxis und ein Vertrauensbildner.

0
gbarry