Ist die Zeigerzuweisung so korrekt?



  • Hellowa,

    ich hätte da gerne mal ein Problem.

    ich habe in einen Beispielcode. Der sieht so aus (Auschnitt)

    ...
    WOMDataDescriptor dataDesc1;
    WOMDataDescriptor dataDesc2;
    ...
    signed char* dataArr1 = new signed char[ nbrElements ];
    ...
    signed char* dataArr2 = new signed char[ nbrElements ];
    ...
    [cpp]signed char const* dataPTR1 = dataArr1;
    signed char const* const dataEndPTR1 = dataArr1 + dataDesc1.overallSize;
    

    ...
    signed char const* dataPTR2 = dataArr2;
    signed char const* const dataEndPTR2 = dataArr2 + dataDesc1.overallSize;
    ...
    [/cpp]

    Die Arrayzuweisungen habe ich in eine Funktion gepackt:

    PrepareDataArray(
        signed char const* dataPTR,
        float* curveData
    )
    {
        signed char const *const dataEndPTR =
                 dataPTR  + dataDesc1.overallSize;
        ...
    }
    

    der Aufruf dann so...

    signed char* gDataArray1 = new signed char[ bytesSize ];
    signed char* gDataArray2 = new signed char[ bytesSize ];
    ...
    
    PrepareDataArray(
          gDataArray1,
          floatArray
    );
    ...
    

    oder mit anderen Worten ist

    signed char const* dataPTR1 = dataArr1];
    signed char const* const dataEndPTR1 = dataArr1 + dataDesc1.overallSize;
    

    dass das gleiche wie...

    signed char const* dataPTR1 = dataArr1;
    signed char const* const dataEndPTR1 = dataPTR1 + dataDesc1.overallSize;
    

    ?


  • Mod

    Das ist...was soll das sein? C kann es nicht sein, weil es in C kein new gibt. In C++ ist es technisch zwar ein korrektes Programm, aber kein C++-Programmierer würde das jemals so machen.

    FrankTheFox schrieb:

    oder mit anderen Worten ist

    signed char const* dataPTR1 = dataArr1];
    signed char const* const dataEndPTR1 = dataArr1 + dataDesc1.overallSize;
    

    dass das gleiche wie...

    signed char const* dataPTR1 = dataArr1;
    signed char const* const dataEndPTR1 = dataPTR1 + dataDesc1.overallSize;
    

    ?

    Was soll da der Unterschied sein, außer das ] am Ende der ersten Zeile, welches da nur ein Schreibfehler sein kann?



  • Ok,

    ja ich hatte mich nur über die Zuweisung des dataPTR1 mit dataArr1 und das in der nächsten Zeile dataArr1 genutzt wird. Weil dort auch genausogut dataPTR1 stehen kann.

    Danke.


  • Mod

    FrankTheFox schrieb:

    Danke.

    Die Anmerkung mit den Sprachen ist durchaus wichtig: Wenn du C machen willst, dann mach auch C, das man mit einem C-Compiler übersetzen kann*. Und wenn du C++ machst, dann versuch darin kein C zu machen, sondern nutze die Mittel von C++. So wie es jetzt ist, hast du alle Nachteile von C++ (nicht sehr viele, aber ein paar kann man sich aus den Fingern saugen), aber keinen der Vorteile.

    *: Du kannst aber versuchen, C zu machen, dass man auch mit einem C++-Compiler übersetzen kann. Da spricht nicht viel dagegen, außer, dass es stellenweise etwas komisch aussieht.



  • Hi,

    ja das sehe ich genauso. In Zukunft werden alle Programme so umgesetzt, das sie wenn C++ auch tatsächlich C++ sind und keine C-Leichen vorhanden sind. Da aber altes Projekt im Augeblick leider so ein durcheinander.



  • Das sieht jetzt wieder nach einer Grundsatzfrage C++ versus C aus! 🤡
    Ich denke bei alten Programmen anders. Dort kann man sehr gut die mit C++ vermeintlich überholten Dinge belassen, wenn sie das gewünschte doch zufriedenstellend tun. Jede Umstellung bedeutet auch Zeitaufwand. Wer will die WinApi für Windows wegschmeissen, nur weil diese in C ist?


Log in to reply