Zuweisung einer Adresse an einen Zeiger
-
Hallo,
ich habe foglenden Code
... UCHAR *pcStr = (UCHAR*) malloc(iL*sizeof(UCHAR)); ... for (i = 0; i < iL; i++) (pcStr+i) = (pcStr+((i+iL-1)%iL));
die letzte Zeile bringt folgenden Compilerfehler (Visual C++):
'=' : left operand must be l-valueIch verstehe nicht, warum das kein L-Value ist.
Habt ihr eine Ahnung wo der Fehler lietgt?
-
"left operand must be l-value" heißt, dass der linke Operand neben = kein Ausdruck sein muss, sondern lediglich der Name einer Variable. Das was du machen willst, kannst du so nicht machen.
Mach's einfach so:
pcStr[i] = (pcStr+((i+iL-1)%iL));
-
*(pcStr+i) = (pcStr+((i+iL-1)%iL));
würde auch gehen.
-
ich wollte aber bezwecken, dass die Adresse an der Stelle pcStr+i ueberschrieben wird und nicht der Inhalt auf den sie verweist. Das muesste doch theoretisch moeglich sein.
-
Caspar schrieb:
ich wollte aber bezwecken, dass die Adresse an der Stelle pcStr+i ueberschrieben wird und nicht der Inhalt auf den sie verweist. Das muesste doch theoretisch moeglich sein.
wie denn? Du kannst die Adresse nicht ändern, du kannst dem RAM sagen, dass die Adresse 0xdeadbeef plötzlich 0xaaaaaa sein soll.
-
Mist, ich hatte einen Denkfehler:
ich habe mir nicht bewusst gemacht, dass pcStr eine Adresse beihnaltet, und pcStr+i auf die Adresse pcStr+i*sizeof(TYP_VON_i) verweist, i also nur ein Offset ist.
Ich dachte jedes Element in pcStr wuerde eine Adresse auf einen Speicherbereich beihnalten, habe pcStr als 'char** pcStr' behandeln wollen.
(ich hoffe das stimmt)Alles klar, danke,
Caspar
-
Hättest du UCHAR **pcStr so deklariert, dann ging es. Das stimmt