Frage

Ich bin c nur zu lernen ++, und kommt aus c, einige Funktionsaufrufe ich in dem Buch confuse mich zu sehen:

char a;
cin.get(a);

In C, könnte dies möglicherweise nicht arbeiten, wenn man das täte, würde es keine Möglichkeit, die Ausgabe zu erhalten, da Sie von Wert sind vorbei, und nicht nach, warum funktioniert das in c ++? Verweist und dereferncing implizit gemacht (der Compiler weiß, dass cin.get einen Zeiger benötigt, so dass es referenziert wird)?

War es hilfreich?

Lösung

C ++

Dies würde in C ++ arbeiten, weil die Funktion Signatur für get() ist wahrscheinlich so aus:

void get(char& a); // pass-by-reference

Das & Symbol nach char Bezeichnet an den Compiler, als wenn man in einem char Wert übergeben, es in einem Hinweis auf die char passieren sollte, anstatt eine Kopie davon zu machen.

Was bedeutet dies im Wesentlichen ist, dass alle innerhalb get() vorgenommenen Änderungen im Wert der a außerhalb des Verfahrens berücksichtigt werden.

Wenn die Funktion Signatur für get() wurde diese:

void get(char a); // pass-by-value

dann würde a durch übergeben werden Wert , die eine Kopie von a bedeutet wird, bevor sie als Parameter in die Methode übergeben werden. Alle Änderungen an a würden dann nur lokal die Methode, und verloren, wenn die Methode zurückgibt.

C

Der Grund, warum dies nicht funktionieren würde in C ist, weil C hat nur Pass-by-Wert . Die einzige Art und Weise zu emulieren pass-by-reference Verhalten in C ist seine Zeiger um Wert zu übergeben, und dann de-Referenz der Zeigerwert (also die gleiche Speicherstelle zugreifen), wenn der Wert innerhalb des modifizierenden Methode:

void get(char* a)
{
    *a = 'g';
}

int main(int argc, char* argv[])
{
    char a = 'f';
    get(&a);
    printf("%c\n", a);

    return 0;
}

Ausführen dieses Programm Ausgabe:

g

Andere Tipps

Referenztypen Arbeit wie die (durch Verweis übergeben, sondern durch Wert vorbei). Es ist ähnlich einen Zeiger (Pass von pointer) in C, aber mit einer schöneren Syntax und mehr Sicherheit (Kompilierzeit-Kontrollen) zu übergeben. Die Umsetzung verläuft durch den Zeiger intern.

C ++ ermöglicht Pass von Referenz (man beachte die &, was bedeutet, dass eine Referenz verwendet wird):

void foo(char& bar) {
    bar = 42;
}

int main() {
    char a;
    foo(a);
    // a == 42 here
}

Das ist, warum einige C ++ Programmierer nicht wie zu verwenden Referenzen wie das.
Es sieht aus wie eine Funktion arguement -. Sie keine Ahnung von der Syntax, ob ‚a‘ geändert wird oder nicht

Bevorzugen const Referenzen vorbei (wenn Sie ein großes Objekt haben und eine Kopie würde teuer sein) und Referenzen oder beste aller geben Zeiger zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top