Wie 3 Werte an eine Funktion zurückgeben?



  • Wieso benutzt du C-Arrays für dynamische Speicheranforderung? Wär doch viel einfacher mit z.B. einem vector o.ä.?

    unsigned primzahlen[n]  = {};// ok, da n const ist.
    

    Und nein, nicht OK wenn n const ist, es müsste schon constexpr sein... seit C99 ist das aber sowieso im Standard (das es auch mit normalen Variablen geht, siehe hier).



  • Hacker schrieb:

    seit C99 ist das aber sowieso im Standard

    Wir programmieren hier aber C++, wo VLAs nach wie vor verboten sind.

    Der Code beweist gar nichts, es handelt sich um eine g++-spezifische Compilererweiterung und nicht um Standard-C++.



  • Liebe Forummitglieder,

    ich habe meinem Dozenten nochmal eine Email zu diesem Problem geschrieben. Mal sehen, was er dazu schreibt.

    Ich danke euch für eure Beiträge und werde meinen Code nochmal überarbeiten. Mit cout wäre das Ganze kein Problem, ohne ist es jedoch sehr umständlich.

    Grüße
    Kakashi



  • Hacker schrieb:

    Wieso benutzt du C-Arrays für dynamische Speicheranforderung? Wär doch viel einfacher mit z.B. einem vector o.ä.?

    kakashi83 schrieb:

    *Bibliotheksfunktionen dürfen nicht benutzt werden

    Hacker schrieb:

    Und nein, nicht OK wenn n const ist, es müsste schon constexpr sein.

    Doch, das ist genau richitg so. Die Größe eines Arrays muss ein konstanter Ausdruck sein und das ist n , da es const-spezifiziert ist und mit einem konstanten Ausdruck initialisiert wurde.



  • Gugelmoser schrieb:

    Doch, das ist genau richitg so. Die Größe eines Arrays muss ein konstanter Ausdruck sein und das ist n , da es const-spezifiziert ist und mit einem konstanten Ausdruck initialisiert wurde.

    const hat mit konstanten Ausdrücken erstmal nichts zu tun. Nicht alles, was const ist, ist auch ein konstanter Ausdruck.

    int i = 42;
    int const j = i; // const, aber kein konstanter Ausdruck
    

    Da im oben gegebenen Beispiel n ein konstanter Ausdruck ist, funktioniert es.



  • Gugelmoser schrieb:

    da es const-spezifiziert ist und mit einem konstanten Ausdruck initialisiert wurde.

    Bei constexpr ist immer garantiert, dass ihm ein konstanter Ausdruck zugewiesen wurde.



  • 314159265358979 schrieb:

    Gugelmoser schrieb:

    Doch, das ist genau richitg so. Die Größe eines Arrays muss ein konstanter Ausdruck sein und das ist n , da es const-spezifiziert ist und mit einem konstanten Ausdruck initialisiert wurde.

    const hat mit konstanten Ausdrücken erstmal nichts zu tun. Nicht alles, was const ist, ist auch ein konstanter Ausdruck.

    Habe ich auch nicht behauptet.



  • Gugelmoser schrieb:

    , da es const-spezifiziert ist

    Nein, hast du natürlich nicht. Es heißt übrigens qualifiziert.



  • Tja, ohne Bibliotheksfunktion läuft es wohl auf WriteConsole auf Windows bzw auf write bei dem Rest der Welt heraus. 🤡



  • Hallo Leute,

    mein Dozent sagte, es gänge mit Referenzparametern. Trotzdem bin ich mir noch nicht ganz im Klaren. Ich werde es aber einmal probieren.

    Grüße
    Kakashi



  • das haben wir dir doch auch gesagt.

    die frage war, wie die ausgabe ohne cout und bibliotheksfunktionen erfolgen sollte.



  • unskilled schrieb:

    die frage war, wie die ausgabe ohne cout und bibliotheksfunktionen erfolgen sollte.

    Das ist keine Frage. Ohne Bibliotheksfunktionen könntest du dir allerhöchstens selber ein ostream -Objekt basteln und das an den Ausgabestream koppeln (der wiederum auch eine Bibliotheksfunktion ist); das ist allerdings völlig unmöglich für einen Anfänger zu schaffen.



  • dummerweise mal wieder komplett fail deine antowrt: man braucht kein ostream-objekt zu basteln, da man die stream-eigenschaften nicht zwangsläufig braucht. aber ansonsten hast du den widerspruch super bemerkt...



  • Mit der Einschränkung wird nur gemeint sein, dass der Kram nicht innerhalb der Funktion sieb ausgegeben werden soll, sondern in main. Der Zweck der Übung scheint ja zu sein, call-by-reference zu lernen.


Anmelden zum Antworten