Heim > Backend-Entwicklung > C++ > Sind Zeiger- und Referenzparameter in C funktional identisch?

Sind Zeiger- und Referenzparameter in C funktional identisch?

Mary-Kate Olsen
Freigeben: 2024-11-03 02:13:29
Original
730 Leute haben es durchsucht

Are Pointer and Reference Parameters Functionally Identical in C  ?

Zeiger vs. Referenzparameter: Eine detaillierte Untersuchung

Frage:

Machen Sie Zeigerparameter (z. B. int foo(bar* p) { ... }) und Referenzparameter (z. B. int foo(bar& r) { ... }) verhalten sich in C identisch?

Antwort:

Der Unterschied zwischen Zeigern und Referenzen geht über ihre Implementierungsdetails im Standard hinaus. Referenzen verkörpern ein syntaktisches Zuckerkonzept und erstellen im Wesentlichen Aliase für Variablen. Dadurch können Compiler Code optimieren, wo Zeiger andernfalls die Komplexität erhöhen würden.

Funktionale Äquivalenz:

Vorausgesetzt, dass keine Nullzeiger-Bedenken bestehen, sind die Funktionen foo(bar* p) und foo (bar& r) sind im Wesentlichen gleichwertig, wenn die Methode someInt() nicht virtuell ist. Beide Funktionen greifen über den Parameter direkt auf die Memberfunktion des Objekts zu. Wenn someInt() jedoch virtuell ist, ruft die referenzbasierte Parameterfunktion (foo(bar& r)) die richtige Methode basierend auf dem Typ des tatsächlichen Objekts auf, während dies bei der zeigerbasierten Funktion (foo(bar* p)) immer der Fall ist Rufen Sie die Basisklassenmethode auf.

Zuweisen zu einer Referenz:

Die Zuweisung bar& ref = *ptr_to_bar führt zu keinem Slicing. Die Referenzreferenz wird ein Alias ​​für das Objekt sein, auf das ptr_to_bar zeigt, sodass Sie direkt auf seine Mitglieder zugreifen können.

Zusätzliche Unterschiede:

  • Referenzen können nicht NULL zugewiesen werden.
  • Die Adresse eines Zeigers ergibt die Adresse der Zeigervariablen, während die Adresse einer Referenz die Adresse der referenzierten Variablen ergibt.
  • Referenzen können nach der Initialisierung nicht neu zugewiesen werden.

Das obige ist der detaillierte Inhalt vonSind Zeiger- und Referenzparameter in C funktional identisch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage