Wie bekomme ich die Adresse eines Zeigers in c/c++?
Lesezeit: 1 Minute
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
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
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;
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.
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
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
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
14042900cookie-checkWie bekomme ich die Adresse eines Zeigers in c/c++?yes
Sie sollten “%s” nicht verwenden, um einen Integer-ähnlichen Wert auszugeben.
– zmo
7. März 2014 um 12:39 Uhr