Wozu Adressen in Pointer speichern??



  • Ahjo und ich les grad weiter im Buch:
    Warum das Ganze?
    Ich kann mir vorstellen, dass sich deine Begeisterung in Grenzen hält. Warum soll man den Wert einer Variablen ......usw.

    Wird ja grade erklärt, hätte mal weiterlesen sollen 😃 😃



  • Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Reyx schrieb:

    Zum großen Teil wurden Pointer früher auch verwendet, weil der Speicher dafür bei Allokation im Gegensatz zu "normalen" Variablen auf dem Heap reserviert wird.

    nee, pointer kannste überall haben, aber das hab ich jetzt bestimmt falsch verstanden

    Reyx schrieb:

    Das hat heute aber nur noch bei sehr systemnahen bzw. kritischen Anwendungen und Spielen Relevanz.

    ...und bei allen programmen die schnell sein sollen/müssen. deswegen sind viele programme, die in sprachen geschrieben wurden, die keine pointer haben, grottenlangsam.



  • z.B.
    anstatt

    void x(char data[1024*1024*1024*1024*10])
    {
      // tue etwas
    }
    
    // in main
    char my_data[1024*1024*1024*1024*10]; // 10 Terrabyte Daten anlegen
    x(my_data); // das 1. mal 10 Terrabyte kopiert
    x(my_data); // das 2. mal 10 Terrabyte kopiert
    

    einfach

    void x(char *data)
    {
      // tue etwas
    }
    
    // in main
    char my_data[1024*1024*1024*1024*10]; // 10 Terrabyte Daten anlegen
    x(my_data); // my_data wird nicht kopiert
    x(my_data); // my_data wird nicht kopiert
    

    ok, du hättest es auch mit Refferenzen machen können und ok, ist vielleicht etwas übertrieben 😃 , aber das ist eine tolle Sache, die du mit Zeigern machen kannst



  • Reyx schrieb:

    Außerdem ist der Datentyp "Pointer auf void" in C++ für die generische Programmierung unentbehrlich!

    *räusper* void*? den bedarf sehe ich bei templates eigentlich nicht.

    mfg



  • Es ist nur nicht in jedem Fall angebracht, gleich ein Template zu verwenden, wo man mal Daten mit beliebigem Datentyp erwartet. Was ist denn z.B. wenn du in der Funktion static-Variablen hast?



  • Reyx schrieb:

    Außerdem ist der Datentyp "Pointer auf void" in C++ für die generische Programmierung unentbehrlich!

    Unsinn, in C++ gibts Templates. Du verwechselst das vielleicht mit C.

    Reyx schrieb:

    Es ist nur nicht in jedem Fall angebracht, gleich ein Template zu verwenden, wo man mal Daten mit beliebigem Datentyp erwartet. Was ist denn z.B. wenn du in der Funktion static-Variablen hast?

    Ja, was ist denn damit?



  • Probier's aus, dann merkst du schnell, das Templates nicht alles sind ...



  • Pointer auf void für die generische Programmierung unentbehrlich?
    *sich am Hinterkopf kratze*

    Pointer auf void brauch man eigentlich nur dann wenn ich nicht die Möglichkeit habe mit Schnittstellen-Klassen zu arbeiten, bzw. ich versuche etwas zu machen, was meine Klassenhierachie nicht hergibt.
    In C soll das ab und zu mal vorkommen (wo dort so intensiv Klassen verwendet werden). :p
    In C++ ist es eher ein Hinweis darauf, dass da irgendo noch C-Code rumschwirrt oder auf eine schlechte Architektur. Durch das void hebelt man nämlich die Typerkennung des Compilers aus und das sollte bei einer guten Architektur eigentlich NIE notwendig sein.
    Abgesehen davon fällt man damit wenigstens beim MS-Compiler kräftig auf die Nase, wenn man versucht einen void * Pointer mit dynamic_cast in irgendwas zu casten.



  • net schrieb:

    Reyx schrieb:

    Das hat heute aber nur noch bei sehr systemnahen bzw. kritischen Anwendungen und Spielen Relevanz.

    ...und bei allen programmen die schnell sein sollen/müssen. deswegen sind viele programme, die in sprachen geschrieben wurden, die keine pointer haben, grottenlangsam.

    Verstehe ich nicht. Was für Sprachen sollen das denn sein?



  • Erst mal bitte nicht an dieser Stelle über die Sprachen philosophieren!

    Eine anwendung von void* fällt mir schon ein vielleicht ist es selbst erklärend:

    void WriteBin(void* ptr; size_t size);
    ...
    WriteBin(myInt, sizeof(int));
    ...
    

    um mein Beispiel vorweg zu entkräften 😉
    Das kann man natürlich mit ner templateklasse eleganter lösen, aber vor allem wenn man auf seine Codegröße achten muss (das soll vorkommen) ist void* die einzige Möglichkeit.
    Die meisten Sachen sind nicht schwarz oder weiß.



  • Java z.B. besitzt keine Pointer. Es ist allerdings ziemlich schwierig zu beurteilen ob das jetzt gut oder schlecht ist.



  • Mathias schrieb:

    Java z.B. besitzt keine Pointer. Es ist allerdings ziemlich schwierig zu beurteilen ob das jetzt gut oder schlecht ist.

    zynische stimmen würden sagen, daß etwas, das sich wie ein pointer verhält auch ein pointer ist, besonders, wenn es NullPointerExceptions schmeißt. aber so sind wir ja nicht. gucken wir lieber mal, wie es lisp macht, ohne pointer zu haben. oder perl.



  • @volkard : was meinst du genau mit "was, das sich wie ein pointer verhält" ?



  • Er meint, dass Java intern sehr wohl mit Referenzen/Pointern arbeitet, was sehr sinnvoll ist, da ansonsten Objekte ziemlich oft kopiert werden müssten.



  • Das Java mit Referenzen arbeitet weis ich auch, und das intern letztendlich Referenzen auch über Pointer realisiert werden is klar.

    Ich habe eher gedacht, dass er auf was bestimmtes anspielt?



  • Pellaeon schrieb:

    @volkard : was meinst du genau mit "was, das sich wie ein pointer verhält" ?

    es trennt pointervalue von pointee-value. man kann nach der initialisierung es auf was anderes zeigen lassen, aber auch nur dem pointee was zuweisen, je nach gusto. man kann es uninitialisiert lassen und dann mit absturz drauf zugreifen. das sind zeiger für mich. zeigerarithmetik ist nur ein gimmick von c, um sich den aufwand zu sparen, echte arrays in den makroassembler zu machen.



  • Pellaeon schrieb:

    Ich habe eher gedacht, dass er auf was bestimmtes anspielt?

    ich mach doch keine anspielungen!
    als da was von "keine pointer in java" flog, mußte ich nur in erinnerung rufen, daß java sehr wohl pointer hat, das wort referenzen höchstens ausdrückt, daß man sich ein * spart (aber dafür andere probleme kriegt) und das herumreiten auf "wir haben keine pointer" nichts als ein marketingtrick ist.



  • Das mit der "Anspielung" war ja auch nicht negativ gemeint. Hab ich mich vielleicht etwas "verdruckt ausgekehrt"^^
    Was du in deinem vorherigen Post geschrieben hast, war das was ich egrn wissen wollte, halt wie du das genauer meinst 🙂



  • volkard schrieb:

    zynische stimmen würden sagen, daß etwas, das sich wie ein pointer verhält auch ein pointer ist, besonders, wenn es NullPointerExceptions schmeißt. aber so sind wir ja nicht.

    Wieso zynisch? Ob ein Ding auf ein anderes zeigt oder darauf verweist ist doch nur Benennungssache.

    gucken wir lieber mal, wie es lisp macht, ohne pointer zu haben. oder perl.

    Lisp hat genauso "unsichtbare" Pointer wie Java. Perl kenn ich nicht so genau, aber meines Wissens gibt es da einen Referenzzählmechanismus, der ja ohne Referenzen bzw. Zeiger ziemlich nutzlos wäre.


Anmelden zum Antworten