Hat C Referenzen?

Lesezeit: 2 Minuten

Jacky Jacks Benutzeravatar
Jackie Jack

Hat C Referenzen? dh wie in C++:

void foo(int &i)

Benutzeravatar von Jon Skeet
Jon Skeet

Nein, tut es nicht. Es hat Zeigeraber sie sind nicht ganz dasselbe.

Insbesondere werden alle Argumente in C als Wert übergeben, anstatt wie in C++ eine Referenzübergabe verfügbar zu sein. Natürlich kann man sowas simulieren Pass-by-Referenz über Zeiger:

void foo(int *x)
{
    *x = 10;
}

...

int y = 0;
foo(&y); // Pass the pointer by value
// The value of y is now 10

Weitere Einzelheiten zu den Unterschieden zwischen Zeigern und Referenzen finden Sie in dieser SO-Frage. (Und bitte fragen Sie mich nicht, da ich kein C- oder C++-Programmierer bin 🙂

  • @Martin: Es wird nicht mehr lange dauern 😉

    – Jon Skeet

    29. November 2010 um 16:23 Uhr

  • @Martin, hatte genau den gleichen Gedanken

    – JaredPar

    29. November 2010 um 16:26 Uhr

Konzeptionell hat C Referenzen, da Zeiger auf andere Objekte verweisen.

Syntaktisch hat C keine Referenzen wie C++.

  • Falsche, konzeptionelle Hinweise und Referenzen sind absolut unterschiedlich. Pointer ist ein algebraischer Datentyp von null und einer Referenz. Referenz ist genau das, Referenz. Die Implikation ist Typsicherheit – es kann sofort gesehen werden, ob eine Funktion jemals bedeutete, ein Null-Argument zu erhalten oder nicht.

    – Hallo Engel

    22. Dezember 2017 um 12:37 Uhr

  • @sbi Nun, Sie könnten wahrscheinlich sagen, dass ein Nullzeiger auf ein Objekt verweist, das sich an der Speicheradresse befindet 0, obwohl dies impliziert, dass der Standard nichts über Nullzeiger aussagt – ich weiß nicht, ob das stimmt. In jedem Fall gibt es eine weit verbreitete Praxis, einen Nullwert zu verwenden, um ausdrücklich “der Zeiger verweist auf nichts” zu bedeuten, bis zu dem Punkt, an dem ich sogar an der Existenz eines Codes zweifle, der null verwendet, um tatsächlich auf die Nulladresse zu verweisen, vielleicht wenn Exploits . IOW, auch wenn der Standard Nullzeiger nicht besonders behandelt, konzeptionell Ein Nullzeiger verweist auf nichts.

    – Hallo Engel

    1. Januar 2018 um 8:10 Uhr

  • @Hi-Angel: Ein Zeiger ist also eine Nullable-Referenz. Zucken. Das verhindert keine Hinweise, Im Algemeinendavon, Referenzen zu sein.

    – sbi

    2. Januar 2018 um 1:33 Uhr

  • @Hi-Angel: Hast du gerade gesagt Referenzen sind keine Referenzen? Also ein lang Bein ist kein Bein? EIN rot Teppich ist kein Teppich? Schnauben. Sie scheinen mit der syntaktischen Definition von “Referenz” in C++ festgefahren zu sein und das Konzept dahinter nicht zu erkennen. HAND.

    – sbi

    6. Januar 2018 um 0:22 Uhr

  • @sbi Ich habe Ihren Begriff verwendet, um Verwirrung zu vermeiden. Aus irgendeinem Grund hat es nicht geklappt. Mein Begriff für die Angelegenheit ist “algebraischer Datentyp von Null und Referenz”. (oder weniger verwendet, aber meine persönliche Präferenz “Koprodukt von Null und Referenz”)und Sie können null → long und reference → leg nicht ersetzen und trotzdem etwas Vernünftiges erhalten.

    – Hallo Engel

    6. Januar 2018 um 5:34 Uhr

1414200cookie-checkHat C Referenzen?

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

Privacy policy