Ich möchte etwas tun, das ziemlich einfach erscheint. 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 gezeigt 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), ist, dass ich dies schließlich für einen Zeiger auf einen Zeiger tun muss. Das ist:
const Emp** emp1 = (const Emp**) item1;
c
pointers
memory-address
Frank V.
quelle
quelle
Antworten:
Was Sie haben, ist richtig. Natürlich werden Sie sehen, dass emp1 und item1 den gleichen Zeigerwert haben.
quelle
So drucken Sie die Adresse in Zeiger auf Zeiger:
printf("%p",emp1)
einmal dereferenzieren und die zweite Adresse ausdrucken:
printf("%p",*emp1)
Sie können jederzeit mit dem Debugger überprüfen, ob Sie Linux verwenden
ddd
und Speicher anzeigen oder einfach nurgdb
die Speicheradresse sehen, damit Sie sie mit den Werten in Ihren Zeigern vergleichen können.quelle
Ich glaube, das wäre am richtigsten.
printf("%p", (void *)emp1); printf("%p", (void *)*emp1);
printf()
ist eine variable Funktion und muss Argumente der richtigen Typen übergeben werden. Der Standard sagt%p
nimmtvoid *
.quelle
void *
ist in der Tat erforderlich.Da Sie die Anzeige der grundlegenden Zeigeradresse anscheinend bereits gelöst haben, überprüfen Sie die Adresse eines Doppelzeigers folgendermaßen:
char **a; char *b; char c = 'H'; b = &c; a = &b;
Sie können auf die Adresse des Doppelzeigers zugreifen,
a
indem Sie Folgendes tun:printf("a points at this memory location: %p", a); printf("which points at this other memory location: %p", *a);
quelle
printf("which contains this value: %c\n" **a);
wollte nur das hinzufügen ^. ^.char c = 'A'; printf("ptr: %p,\t value: %c,\t and also address: %zu",&c, c,&c);
Ergebnis:
quelle
Ich war in dieser Position, besonders mit neuer Hardware. Ich schlage vor, Sie schreiben eine eigene kleine Hex-Dump-Routine. Sie können die Daten und die Adressen, an denen sie sich befinden, zusammen anzeigen. Es ist eine gute Praxis und ein Vertrauensbildner.
quelle