Schreibbar obwohl read-only, Wieso?



  • Hallo,

    Wieso können hier die Werte vertauscht werden obwohl es readonly ist (const int):

    #include <stdio.h>
    #include <stdlib.h>
    
    int change(const int *a, const int *b)
    {
       int help;
       help=*a;
       *a=*b;
       *b=help;
    
       return 1; //True
    }
    
    int main(int argc, char *argv[])
    {
      int a=1, b=2;
    
      printf("A is %i, B is %i\n", a, b);
    
      if(change(&a, &b))
        printf("Changed! New A is %i, New B is %i\n", a, b); 
    
      system("PAUSE");	
      return 0;
    }
    

    Der Compiler sagt dass es nur readonly sei [WARNING], aber eigentlich müsste das verboten sein. Aber mich nichts trotzdem wunder wieso es halt geht.

    Ist das ein unsauberprogrammiertes Schlüsselwort? *grins*

    gruss,
    euer johnny.xy



  • Was für 'nen Compiler nutzt du denn? Das darf eigentlich nicht funktionieren! 😉



  • devcpp



  • In C ist das eben so ...



  • IMO darf in deinem code nur die zeigeradresse nicht geändert werden:

    int change(const int*const a, const int*const b)
    {
       int help;
       help=*a;
       *a=*b;
       *b=help;
    
       return 1; //True
    }
    

    so müsste es gehen?!



  • stefan_guest schrieb:

    IMO darf in deinem code nur die zeigeradresse nicht geändert werden:

    nee, umgekehrt...
    const int* a ---> das worauf a zeigt ist const
    int* const a ---> a ist const



  • Also:

    int *p;             /* Zeiger auf int */
    const int *q;       /* Zeiger auf konstanten int */
    int const *r;       /* Ebenfalls Zeiger auf konstanten int, const int == int const */
    int *const s;       /* konstanter Zeiger auf int */
    const int *const t; /* konstanter Zeiger auf konstanten int */
    int const *const u; /* Ebenfalls konstanter Zeiger auf konstanten int */
    

    In C99 ist C const-korrekt, das heißt, der Code dürfte eigentlich nicht funktionieren. Allerdings sind viele C-Compiler da, gerade wenn es um pointer auf konstante Werte geht, ziemlich nachlässig.



  • johnny.xy schrieb:

    devcpp

    Dev-C++ ist kein Compiler ➡ GCC.

    Zum anderen solltest du hier deinen Compiler updaten. Bei mir wirft der Code nämlich 'nen sauberen Fehler.


Anmelden zum Antworten