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.