Konstante Arrays



  • Hallo,
    sind Arrays immer konstant? Der Zuweisungsoperator funktioniert ja nicht.



  • int a[10];
    a[0]  = 42;
    

    sollte auch bei dir funktionieren



  • Das ist aber kein Zuweisungsoperator auf das Array @Manni

    Ja, sowohl Speicherort als auch Grösse (was damit zusammenhängt) sind konstant. Die Werte kannst du aber noch explizit Konstant machen.
    Das gilt jedenfalls in dem Beispiel von Manni

    void f(int a[]) { ... }
    

    Ich weiss es nicht auswendig, aber ich glaube hier kann man a verändern.



  • Ich hab neulich gelernt, dass man Arrays zuweisbar machen kann, indem man sie in eine Struktur verpackt. D.h. nicht das Array wird zugewiesen, sondern die Struktur. In ihr liegt aber das Array. Somit kannst du indirekt eine Zuweisung realisieren. Du erkaufst dir das allerdings damit, dass das Array eine fixe Größe bekommt.



  • Wurst schrieb:

    sind Arrays immer konstant?

    Nein.

    Wurst schrieb:

    Der Zuweisungsoperator funktioniert ja nicht.

    Es gibt keinen Zuweisungsoperator für Arrays. Es gibt auch keinen Kopierkonstruktor. Um Arrays herum gibt es einige Sonderregeln. Willkommen bei den herrlich irregulärem und wenig intuitiven C-Arrays. Missverständnisse vorprogrammiert.

    Käse schrieb:

    void f(int a[]) { ... }
    

    Ich weiss es nicht auswendig, aber ich glaube hier kann man a verändern.

    Ja, kann man. Aber a ist hier kein Array sondern ein Zeiger. Ein Beispiel einer der wundertollen Sonderregeln bzgl Arrays.

    Ich habe mir neulich schonmal bzgl Arrays und Zeiger die Finger wund geschrieben. Das mach ich so schnell nicht nochmal. Bin auch grad zu faul, den Link rauszusuchen. Das Thema war irgendwas mit "char" und char Arrays.

    kk



  • krümelkacker schrieb:

    Ich habe mir neulich schonmal bzgl Arrays und Zeiger die Finger wund geschrieben. Das mach ich so schnell nicht nochmal. Bin auch grad zu Faul, den Link rauszusuchen. Das Thema war irgendwas mit "char" und char Arrays.
    kk

    Das verwirrende char in C/C++



  • Nun gut, danke für die Antworten.
    Das mit dem char-Zeug versteh ich zwar noch nicht (wie gut, dass es std::string gibt :D), aber vielleicht irgendwann mal 🙂



  • Wurst schrieb:

    Nun gut, danke für die Antworten.
    Das mit dem char-Zeug versteh ich zwar noch nicht (wie gut, dass es std::string gibt :D), aber vielleicht irgendwann mal 🙂

    Und wie gut, dass es std::vector für Arrays dynamischer Größe gibt 🙂 Die kann man auch kopieren...



  • Und std::tr1::array für Arrays statischer Grösse (welche auch sicherer sind). Damit bleibt so ziemlich kein Grund mehr für rohe C-Arrays übrig.


Anmelden zum Antworten