call by reference problem



  • mahlzeit miteinander!

    ich arbeite immer noch mein buch durch und bin bei einem problem, bei dem ich nicht weiter weiß.

    c nutzt an sich nur call by value.
    call by reference könnte man aber durch das beispiel (siehe unten) auch erreichen.
    problem allerdings ist, dass das buch ziemlich viele fehler hat. davon habe ich schon eine menge entdeckt. ist hier nun wieder ein fehler im buch oder??? 😕

    hier nun das beispiel 1:1 aus dem buch:

    #include <stdio.h>
    
    void berechnung(int&x)
    {
         x*=2;
         printf("Zahl in der Funktion: %d \n", x);
         printf("Adresse von x = %p \n", &x);
    }
    
    void main (void)
    {
         int zahl = 10;
         printf("Adresse von Zahl = %p \n", &zahl);
         berechnung(zahl);
         printf("Zahl in main = %d \n", zahl)
    }
    

    im buch ist noch ein bild, bei dem die speicheradresse von zahl in main und funktion gleich sind.
    und natürlich das die zahl in main und in der funktion 20 ist.

    mein compiler macht dies aber nicht. das kaufmännische "&" ist das problem.
    da steht dann: error: expected ';', ',' or ')' before '&' token. nehm ich das kaufmännische "&" bei den übergabeparametern in der funktion raus, gehts. dann sind aber speicheradressen und werte unterschiedlich, da meines erachtens dann call by value greift.

    wie immer gilt: bitte auf laieniveau, wenn möglich. btw: pointer kann ich noch nicht.
    besten dank wie immer für die hilfe!
    norben



  • Dein Compiler hat recht, wenn es ein C (und kein C++)Compiler ist. ( & in diesem Zusammenhang ist eine C++ Referenz [dazu geschaffen, um C++ler von Zeigern möglichst fern zu halten] )
    Es gibt keine Referenzen in C.
    Es gibt kein call by reference in C.
    Es gibt in C nur call by value.
    Laienhafte Versuche, einen Funktionsparameter als Zeiger zu deklarieren und das Ganze dann als call by reference zu verkaufen ist Unsinn, da der Zeiger auch hier natürlich kopiert wird - da passiert nichts by reference.
    Werfe das Buch weg.



  • Du hast da ein Beispiel für Referenzen in C++.

    In C sieht das so aus:

    #include <stdio.h>
    
    void berechnung(int *x)  // Einen Zeiger
    {
         *x *= 2;
         printf("Zahl in der Funktion: %d \n", *x);
         printf("Adresse von x = %p \n", x);
    }
    
    int main (void)  // main gibt immer ein int zurück
    {
         int zahl = 10;
         printf("Adresse von Zahl = %p \n", &zahl);
         berechnung(&zahl);  // Und die Adresse übergeben
         printf("Zahl in main = %d \n", zahl)
    }
    

    Kannst du noch schreiben, welches Buch du jetzt entsorgst?



  • Titel:
    Programmieren in C - Programmieren lernen von Anfang an
    //Mit vielen Programmierbeispielen
    //Geeignet zum Selbststudium

    Autor: Heimo Gaicher

    ISBN: 978-3-8491-1850-1

    ich habe wie gesagt schon viele fehler dort entdeckt. ist nicht der erste.
    und ums aufn punkt zu bringen: ist echt zum kotzen wenn man fürs studium c können muss, weil ich es absolut nicht bringe, dann versuche mich hier tag für tag hinzusetzen um im endeffekt scheiße zu ausm buch zu lernen 👎



  • Oh mann, dieses Buch ist ja fast schon eine neue Qualität der Grottigkeit.

    Ein paar Snippets aus einer Amazon-Rezension[1]:

    Der Autor merkt in all seinen Beispielen nicht, dass er mit C++ arbeitet, das ist laienhafter Unsinn, der zwangsläufig zu weiteren Fehlern führt, siehe unten.

    fflush(stdin)

    "Die Dezimalzahl 200 soll in eine Binärzahl umgerechnet werden..."

    int a=2;
    int *ptr1=&a;
    
    printf("Die Speicheradresse von a =%d",&ptr1)
    

    Fazit:
    Der Autor ist aufgrund seiner laienhaften Vorstellung von C-Programmierung eindeutig überfordert damit, ein Buch über C-Programmierung zu schreiben.

    [1]: übrigens der einzigen mit 1 Stern, der Rest ist eine konfuse Mischung aus Jubelpersern und Leuten, die weder vor noch nach Lektüre des Buchs programmieren konnten, es aber trotzdem ganz wunderbar für Einsteiger finden und teilweise offen zugeben, dass Buch nicht einmal selbst gelesen zu haben.



  • Leider ist diese Rezension vom lezten Monat. Demnach relativ neu.



  • wie ist das eigentlich rechtlich zu sehen?
    mir fehlen noch ca. 60 seiten bis ich es durch habe. problem dabei ist, dass ich die fehler im buch bewusst/vielleicht auch unbewusst mitgelernt habe.
    (wobei ich gerade ernsthaft überlege, die für mich persönlichen knackpunkte (pointer und ff. themen) aus einem richtigen buch zu lernen)

    sollte ich nun in meiner klausur durchfallen und fehler aufgrund des buches gemacht haben, dann könnte ich ja mein prof. auf diverse zeilen in diesem schrottbuch verweisen oder nicht?

    wichtig ist noch, dass ich das buch in unserer hochschulbibo ausgeliehen habe.
    da sollte demnach ja auch fachliteratur stehen.

    😕 😕 😕


Anmelden zum Antworten