Notationen C++

schwegennagel

Cadet 4th Year
Registriert
Feb. 2005
Beiträge
79
Hallo,
ich habe die Aufgabe ein fertiges Programm zu analysieren. Dabei sind mir ein paar Notationen jedoch etwas rätselhaft. Wäre deshalb froh, wenn mir jemand die Bedeutung erklären könnte.


*s++ = (char)c; heißt das *s+1=char(c);???
c wurde im Programm als Integer-Variable deklariert. Was bewirkt denn (char) davor????


line = (char *)malloc( (s-buffer)+1); hier schon wieder das (char*). Ich weiß das malloc Speicher reserviert. Aber was soll das char??

Anmerkung: line ist der Rückgabewert einer Funktion. Die Funktion gibt char zurück. Wandelt das (char) dann Integer-Werte in char um??


Was bewirkt [MAX] in static char buffer[MAX]?
 
Hallo,

Code:
ine = (char *)malloc( (s-buffer)+1);
Damit reserviert man einen Speicherbereich der Größe "s-buffer+1", was immer auch s-buffer ist...
Das (char *) ist ein Cast-Operator, damit kannst du den void-Zeiger der malloc Funktion in einen beliebigen anderen Datentyp unwandeln lassen.
Ich nehme an, dass das auch auf dein erstes Problem zutrifft, das (char) sollte ein Cast sein => Umwandlung.

Das "MAX" in [MAX] wird wohl eine Konstante sein, mit der die Array-Grenzen gesetzt wurden.
 
Hi,

(char) und (char*) sind casts von int nach char bzw (void*) nach char (malloc gibt einen void pointer zurück, der in einen c string gecastet wird).

*s++ dereferenziert den pointer s und inkrementiert diesen nach ausführung der anweisung um eins. hier wird wahrscheinlich durch einen c string iteriert?

MAX wird eine konstante oder ein makro sein - bewirkt also, dass buffer anstatt eines einzelnen char ein array von chars der größe MAX wird.. kann dann als c string interpretiert werden.

das ganze sind eigentlich c basics (nicht umbedingt c++), wenn das für die schule o.ä. ist, solltest du dich auf jedenfall weiter einlesen.

mfg

Nico
 
zAD schrieb:
*s++ dereferenziert den pointer s und inkrementiert diesen nach ausführung der anweisung um eins.
Fast, aber nicht ganz richtig bzw. missverständlich. *s++ inkrementiert den Pointer s sofort, gibt dann eine Kopie des alten Wertes von s zurück welche danach dereferenziert wird. (postfix increment hat eine höhere Assoziativität als Dereferenzierung)
 
Und da ist dann der Hund begraben, falls man das nicht richtig versteht, dass der alte Wert zurückgegeben wird. Insgesamt würde ich davon absehen, den Pointer direkt zu verschieben, sondern (wenn möglich) in der Machart
*(s+laufvariable)=...
zu handhaben. Dann gibt es weniger Probleme im Codeverständnis und ist weniger Anfällig gegenüber solchen Gemeinheiten.
 
Zuletzt bearbeitet:
Zurück
Oben