Binäre Eingabe: wieso Übergabe per Referenz zwingend?



  • High!

    Ich arbeite gerade ein Beispiel aus BREYMANN, C++ - Eine Einführung, S. 214ff durch, in dem es um die Erzeugung einer Binärdatei mit 20 double-Zahlen geht.

    Die Zeile für das Einlesen der Daten lautet im Original so:

    Ziel.write((char*) &d, sizeof(d));

    und funktioniert so auch einwandfrei. Allerdings frage ich mich, wieso der Wert d (ist jeweils eine double-Zahl) als Referenz übergeben wird... als ich das & wegließ, erhielt ich die Fehlermeldung "cannot convert 'd' from type 'double' to type 'char'!

    Ist die Umwandlung in einen Zeiger welcher Art auch immer grundsätzlich nur mittels einer Referenz auf das Ursprungsobjekt möglich? Wenn ja, wieso?

    Bis bald im Khyberspace!

    Yadgar



  • Der &-Operator erzeugt keine Referenz von d, sondern einen Zeiger auf Double (also die Speicheradresse, an der das double steht).

    Diese Adresse (Typ ist double*) wird umgewandelt in ein char*, da man Dateien üblicherweise Zeichenweise beschreibt. Die Funktion write erhält also eine Adresse (Anreihung binärer Zeichen) und eine Länge (Anzahl der binären Zeichen). Write interessiert nicht was er speichert, sondern nur wo es liegt und wie lang es ist.



  • Das ist keine Übergabe als Referenz, sondern als Zeiger - und ist nötig, weil write() einen char* als ersten Parameter erwartet (die Formulierung "(char*)&d" interpretiert die Adresse von d als char*, also d letzendlich als char(-array)).

    (und & ist noch aus C-Zeiten als Adress-of-Operator übernommen worden)


Anmelden zum Antworten