PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unklarheit bei Schlüsselwort "const"



Boron
17-11-2005, 09:39
Hallo zusammen,

mir sind da ein/zwei Sachen beim Schlüsselwort const noch nicht ganz klar.
Die mir zur Verfügung stehende Literatur beschränkt sich nur auf das Einfachste.

Wenn man schreibt
const int zahl = 12;habe ich zur Laufzeit eine unveränderliche Variable mit Namen zahl. So weit so gut.

Aber wenn ich schreibe
const int array[] = { 2, 4 };frage ich mich, was den jetzt "konstant" ist. Sind die Werte im Array unveränderlich aber der Zeiger mit Namen array kann verändert werden, oder ist der Zeiger array unveränderlich aber die Zahlen im Array könne verändert werden?

Wie kann ich sowohl Zeiger als auch Werte im Array "konstant" definieren?

(Wieviele haben sich da schon mal Gedanken drüber gemacht :rolleyes:?)

Detrius
17-11-2005, 12:16
Google ist was nettes. :-)

http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.5

karx11erx
17-11-2005, 12:21
Boron,

Du wirfst etwas durcheinander.

Dein 'array' ist eine statische Variable. Du kannst sie zwar syntaktisch ("schreibweisenmäßig") wie einen Pointer behandeln ("*(array + 10) = 0"), aber sie ist kein Pointer, dem Du eine andere Adresse zuweisen kannst. In diesem Sinne ist 'array' also 'const'.

Etwas anderes wäre folgendes:

int array1 [100];

int *pArray = array1;

pArray ist ein richtiger Pointer, den man verändern kann:

int array2 [100];

pArray = array2; (oder: pArray = &array2 [0];)

Um pArray const zu machen, müßtest Du

int * const pArray = array1;

schreiben.

Detrius,

verwirr die Anfänger doch nicht so. ;)

Boron
17-11-2005, 14:07
Anfänger?
Wo sind hier Anfänger?
*Kopf suchend von links nach rechts dreh*

Danke Leute. Jetzt ist klar.

(Darf ich mich als "Profi" bezeichnen, wenn ich "professionell" an der Entwicklung von Steuergeräten für Fahrzeuglenkungen beteiligt bin?
Schließlich ist diese hardwarenahe Entwicklung somit meine Profession (Beruf) ;).
Und es gibt einen ganzen Haufen Leute, denen das mit "const" ein Greuel ist und es deshalb nie nutzen, und somit nicht wissen was Sache ist. Und bevor ich meinen KOllegen was falsches erzähle informiere ich mich lieber vorher.)

karx11erx
17-11-2005, 16:15
Sorry Boron,

aber wer bei einer Deklaration à la "int array [10]" fragt, ob array ein veränderlicher Pointer ist und damit den Eindruck erweckt, nicht verstanden zu haben, dass ein solcher Vektor zwar als Pointer geschrieben, aber nicht uneingeschränkt behandelt werden kann, der wirkt halt wie ein (C-) Anfänger.

Ich entwickle seit 20 Jahren Software und habe nahe 0 Ahnung von Linux - also bin ich ein Linux-Anfänger. ;)

Es war nicht bös gemeint. :)