Problem mit Referenzen



  • Ich glaube in der Überschrift gelesen zu haben "Problem mit Referenzen"
    int* ist aber ein Pointer keine Referenz
    int& ist die Referenz
    Also

    void b(int& x)
    {
        cout << x;
        cin.get();
    }
    
    void a(int& x)
    {
       b(x);
    }
    
    int main()
    {
    
        int x;
        x=4;
        a(x);
    }
    

    😉



  • Nur das es in AnsiC keine Referenzen gibt.



  • Braunstein schrieb:

    Nur das es in AnsiC keine Referenzen gibt.

    C kennt keine 'reference types' im sinne von C#, Java o.ä. in C nimmt man eben pointer dafür. der wichtigste unterschied ist ja nur, dass bei referenzen mit verweisen auf objekte gearbeitet wird, während bei 'by value' das objekt selber kopiert wird.

    int a;
    ...
    f (a);   // call 'by value', das objekt selbst wird kopiert
    g (&a);  // call 'by reference', es wird ein verweis auf das objekt übergeben
    

    🙂



  • Und bei g() übergibst du ein Objekt "by value" vom Typ T*.



  • Tim schrieb:

    Und bei g() übergibst du ein Objekt "by value" vom Typ T*.

    ja, das ist aber technisch bedingt. die referenz bzw. der pointer wird 'bei value' übergeben. es ändert aber nichts an der referenzsemantik, die dahinter steckt.
    🙂



  • Es geht hier auch mehr um Terminologie als um Semantik.

    Edit: Aber ich erwarte nicht (mehr), dass du das verstehst.



  • Tim schrieb:

    Es geht hier auch mehr um Terminologie als um Semantik.

    ist doch kein problem:

    ISO/IEC 9899:1999 schrieb:

    A pointer type describes an object whose value
    provides a reference to an entity of the referenced type.

    🙂



  • Also findest du auch das "call by reference" von dem du hier immer redest?



  • Tim schrieb:

    Also findest du auch das "call by reference" von dem du hier immer redest?

    wo? im C-standard? nein, aber wieso sollte 'call by reference' dort ausdrücklich erwähnt sein? wenn referenzsemantik in C mit pointern ermöglicht wird, sollten damit auch 'calls' gehen. ich weiss gar nicht, warum du damit solche schwierigleiten hast, oder meinst du den 'referenzbegriff' haben pointerlose programmiersprachen für sich gepachtet?
    🙂



  • Green Heaven schrieb:

    Tim schrieb:

    Also findest du auch das "call by reference" von dem du hier immer redest?

    wo? im C-standard? nein, aber wieso sollte 'call by reference' dort ausdrücklich erwähnt sein? wenn referenzsemantik in C mit pointern ermöglicht wird, sollten damit auch 'calls' gehen. ich weiss gar nicht, warum du damit solche schwierigleiten hast, oder meinst du den 'referenzbegriff' haben pointerlose programmiersprachen für sich gepachtet?
    🙂

    Es geht aber darum die Technik zu begreifen, die dahinder steht. C kennt nunmal kein "by reference", in C wird alles kopiert.

    Was sind eigentlich "pointerlose programmiersprachen"? Kann man sich eine Sprache ohne Pointer ueberhaupt noch vorstellen?



  • DEvent schrieb:

    Es geht aber darum die Technik zu begreifen, die dahinder steht. C kennt nunmal kein "by reference", in C wird alles kopiert.

    in anderen programmiersprachen nicht? sind referenzen nicht überall bloss pseudo-pointer?

    DEvent schrieb:

    Kann man sich eine Sprache ohne Pointer ueberhaupt noch vorstellen?

    es gibt viele, die ohne auskommen.
    🙂


Anmelden zum Antworten