Forum: PC-Programmierung Initializer element is not constant [pointer]


von Lukas (Gast)


Lesenswert?

1
volatile uint8_t menu=0;
2
uint8_t* pmenu = menu;

'initializer element is not constant'
Ich will keine Konstante definieren..., verstehe den Fehler in diesem 
Zusammenhang nicht.
Möchte einen stumpfen Pointer definieren.

Wieso meckert, der dann hier für nicht:
1
char text[12];
2
char* ptext = text;

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

zum einen ist menu nicht konstant, sondern volatil; zum zweiten wolltest 
du schrieben:
1
uint8_t* pmenu = &menu;
2
                 ^

von Klaus (Gast)


Lesenswert?

Anders als in der deutschen Sprache, kann in Englisch durchaus ein 
Adjektiv genauso geschrieben werden, wie ein Substantiv. Allerdings 
wäre, falls mit "Constant" ein Substantiv gemeint sein würde, dennoch 
ein unbestimmter Artikel "a" davor. Lies also den Satz nochmal, bitte.

von Lukas (Gast)


Lesenswert?

Wieso brauche ich für den String kein "&" als Adressenbezug?

von Max H. (hartl192)


Lesenswert?

Lukas schrieb:
> Wieso meckert, der dann hier für nicht:
> char text[12];
> char* ptext = text;
Weil der Namen eins Arrays ohne [] die Adresse des nullten Elements ist 
und "menu" eine integer und keine Adresse ist.

von Peter II (Gast)


Lesenswert?

Lukas schrieb:
> Wieso brauche ich für den String kein "&" als Adressenbezug?

weil es nicht wirklich ein string ist sondern ein Array.
1
volatile uint8_t menu[1]= {0};
2
uint8_t* pmenu = menu;

würde auch gehen.

von Max H. (hartl192)


Lesenswert?

Peter II schrieb:
> weil es nicht wirklich ein string ist sondern ein Array.
In C ist das ja das gleiche, bis auf die Nullterminierung. Beides 
einfach ein char Array.

von Lukas (Gast)


Lesenswert?

Danke.

von Vlad T. (vlad_tepesch)


Lesenswert?

> uint8_t* pmenu = &menu;

der compiler sollte hier trotzdem warnen, weil der volatile qualifier 
unterm Tisch fällt.

Warnt der Compiler nicht, wurde wohl -wall -pedantic vergessen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.