So wandeln / konvertieren Sie Zeiger in C ++


143

Wie kann ich einen Zeiger ( Object *ob) an eine Funktion übergeben, die ein Prototyp ist void foo(Object &)?


Der Titel sagt "Cast [sic] Referenz auf Zeiger", aber die Frage beginnt mit einem Zeiger und benötigt eine Referenz. Welche Richtung ist es?
MSalters

@ MSalters sollte konvertiert werden . Ich bearbeite es. Aber ich suchte nach einer Lösung, die ich bekam, also erwähnte ich Besetzung
Dewsworld

Antworten:


209

Nennen Sie es so:

foo(*ob);

Beachten Sie, dass hier kein Casting stattfindet, wie in Ihrem Fragentitel vorgeschlagen. Wir haben lediglich den Zeiger auf das Objekt de-referenziert, das wir dann an die Funktion übergeben.


25
@ Ricobob Das passiert bei SO so oft. Antworten auf einfache Fragen, die leicht zu verstehen sind, bringen oft viele Stimmen ein. Lange und komplexe Antworten auf knifflige Fragen erhalten oft nur wenige positive Stimmen, da die Wähler den Verdienst nicht leicht beurteilen können. Was die Wiederholung betrifft, habe ich wegen der Wiederholungsobergrenze nichts dazu bekommen. ;-) Aber ich stimme von Herzen zu. Ich wünschte, komplexe Antworten würden mehr Wiederholungen erhalten.
David Heffernan

@DavidHeffernan Ja, dies scheint das Problem zu sein - ich denke, es ist ein Problem, das MetaSO betrifft - wenn jemand es dort noch nicht angesprochen hat.
Ricibob

4
Erstellt dies eine Kopie des obZeigers oder konvertiert er nur (falls nicht umgewandelt) in eine Referenz? Was passiert , wenn obwar nullptr?
Drew Noakes

5
@Drew Dereferenziert einfach den Zeiger. Keine Kopie. Keine Konvertierung. Keine Besetzung. Das Objekt wird dann unter Bezugnahme auf die Funktion übergeben. Es ist ein Fehler, wenn der Punkt null ist.
David Heffernan


41
foo(*ob);

Sie müssen es nicht umwandeln, da es sich um denselben Objekttyp handelt. Sie müssen es nur dereferenzieren.


Das Erraten und Hinzufügen von vielen ... ist hier normalerweise nicht das Format einer guten Antwort (obwohl es in diesem Fall richtig ist), deshalb haben Sie wahrscheinlich eine Ablehnung erhalten.
KillianDS

5
bhhaaa, ich habe das "Ich denke" hinzugefügt, weil ich mindestens 30 Zeichen geschrieben habe. Auf diese Weise füge ich auch das "..........."
Roee Gavirel

10
@RoeeGavirel Ich bin dein erster Wähler, weil ich die Ablehnung als hart empfand. FWIW Sie können die 30-Zeichen-Grenze überschreiten, aber einen HTML-Kommentar hinzufügen <! ----------------------------->, den ich in gemacht habe meine erste Version der Antwort! Meine Bearbeitung Ihrer Antwort zeigt, wie.
David Heffernan

Nur-Code-Antworten ohne Erklärung sind heutzutage verpönt.
Keith M

1
@KeithM - Das ist ein zufälliger Kommentar und -1. Die Antwort wurde vor ungefähr 6 Jahren gegeben, auch die Frage fragte nicht nach dem "Warum", sondern nur nach dem "Wie". Aber sicher, ich werde eine Erklärung hinzufügen.
Roee Gavirel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.