Wie bekomme ich die Adresse eines Zeigers in c/c++?

Lesezeit: 1 Minute

Benutzeravatar von Trung Nguyen
Trung Nguyen

Wie bekomme ich die Adresse eines Zeigers in c/c++?

Beispiel: Ich habe den folgenden Code.

int a =10;
int *p = &a;

Wie bekomme ich die Adresse des Zeigers? p? Jetzt möchte ich die Adresse von p drucken, was soll ich tun?

print(“%s”,???) was ich an ??? übergebe.

  • Sie sollten “%s” nicht verwenden, um einen Integer-ähnlichen Wert auszugeben.

    – zmo

    7. März 2014 um 12:39 Uhr

Benutzeravatar von Loghorn
Loghorn

Um die Adresse von p zu erhalten, tun Sie Folgendes:

int **pp = &p;

und Sie können fortfahren:

int ***ppp = &pp;
int ****pppp = &ppp;
...

oder, nur in C ++ 11, können Sie Folgendes tun:

auto pp = std::addressof(p);

Um die Adresse in C zu drucken, unterstützen die meisten Compiler %palso können Sie einfach Folgendes tun:

printf("addr: %p", pp);

Andernfalls müssen Sie es umwandeln (unter der Annahme einer 32-Bit-Plattform).

printf("addr: 0x%u", (unsigned)pp);

In C++ können Sie Folgendes tun:

cout << "addr: " << pp;

  • Ich habe cout << &p ausprobiert und eine Fehlermeldung erhalten. Wie kommt es, dass es nicht so einfach ist?

    – Ich mag

    16. Januar 2018 um 1:57 Uhr

  • Und wie stellt man die Zeigeradresse auf var wieder her? zum Beispiel int *pp = getponterexample(address) ?

    – E-Info128

    11. Februar 2019 um 22:11 Uhr

  • @IWie ich es versucht habe, es funktioniert gut. Die Aussagen cout << &p; und cout << pp; dieselbe Adresse drucken.

    – Codenerd

    19. Juli 2021 um 7:41 Uhr


Benutzeravatar von zmo
zmo

int a = 10;

Um die Adresse von a zu erhalten, tun Sie Folgendes: &a (Adresse von a), die ein zurückgibt int* (Zeiger auf int)

int *p = &a;

Dann speicherst du die Adresse eines in p was vom Typ ist int*.

Schließlich, wenn Sie tun &p Sie erhalten die Adresse von p was vom Typ ist int**also Zeiger auf Zeiger auf int:

int** p_ptr = &p;

hab gerade deinen edit gesehen:

Um die Adresse des Zeigers auszudrucken, müssen Sie sie entweder konvertieren:

printf("address of pointer is: 0x%0X\n", (unsigned)&p);
printf("address of pointer to pointer is: 0x%0X\n", (unsigned)&p_ptr);

oder wenn Ihr printf es unterstützt, verwenden Sie die %p:

printf("address of pointer is: %p\n", p);
printf("address of pointer to pointer is: %p\n", p_ptr);

&a gibt Adresse von a&p gibt Adresse von p.

int * * p_to_p = &p;

Benutzeravatar von alk
alk

Mit dieser C-Quelle:

int a = 10;
int * ptr = &a;

Benutze das

printf("The address of ptr is %p\n", (void *) &ptr);

um die Adresse zu drucken ptr.

Bitte beachten Sie, dass der Konvertierungsbezeichner p ist der einzige Konvertierungsbezeichner, der den Wert eines Zeigers ausgibt und es ist für die Verwendung mit definiert void* nur typisierte Zeiger.

Aus man printf:

p

Das Leere * Zeigerargument wird hexadezimal gedruckt (als ob von %#x oder %#lx).

Du kannst den … benutzen %p Formatierer. Es ist immer am besten, Ihren Zeiger zu werfen void* vor dem Drucken.

Die C-Norm sagt:

Das Argument soll ein Zeiger auf void sein. Der Wert des Zeigers wird in einer implementierungsdefinierten Weise in eine Folge von Druckzeichen umgewandelt.

So geht’s:

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

  • das scheint falsch zu sein es fehlt ein & vor dem p

    – Kuhlambo

    18. Januar 2018 um 8:51 Uhr

Benutzeravatar von user3345354
Benutzer3345354

Sie können %p in C verwenden

In C:

printf("%p",p)

In C++:

cout<<"Address of pointer p is: "<<p

  • das scheint falsch zu sein es fehlt ein & vor dem p

    – Kuhlambo

    18. Januar 2018 um 8:51 Uhr

Benutzeravatar von Rishi Dwivedi
Rishi Dwivedi

Sie können dies verwenden

in C

int a =10;
int *p = &a;     
int **pp = &p;
printf("%u",&p);

in C++

cout<<p;

  • Im obigen Beispiel cout<<p; gibt tatsächlich die Adresse des Objekts aus wies auf, nicht die Adresse des Zeigers selbst. Auf die Adresse des Zeigers kann über zugegriffen werden &p.

    – Superkat

    18. August 2015 um 19:53 Uhr

1404290cookie-checkWie bekomme ich die Adresse eines Zeigers in c/c++?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy