Zeiger
-
Hallo!
Ich habe eine Frage zu folgendem Beispielcode:
char* p; memset(WorkString, 0x00, sizeof(WorkString)); p = strstr(Buffer, TestString); if(p == 0) { return WorkString; } else { if ('R' != p[0]) { p++; ...p ist also ein Zeiger auf ein char-Objekt. Mit strstr(Buffer, TestString) wird diesem p die Adresse der Stelle angezeigt, an der TestString im Buffer vorkommt. Soweit denke ich stimmt das, oder?
Was mir jetzt unklar ist: was bedeutet if ('R' != p[0]) ? Heißt das, falls die Adresse nicht mit 'R' beginnt?
Falls ja: was sind das für spezielle Adressen, die mit einem R beginnen? Ich wundere mich nämlich, warum dafür extra eine if-Schleife gemacht wird.Schon mal ein dickes Danke für eure Hilfe!
Liebe Grüße,
Julia
-
Hallo.
P ist ein char-Pointer, der nach strstr() auf den ersten Index von TestString innerhalb des Strings Buffer zeigt. p[0] gibt nun das Zeichen zurück, das genau an dieser Adresse steht. Dann wird geprüft, ob das Zeichen ein "R" ist. Alles halb so wild

Wenn du mehr über diese Verhalten von p[0] wissen möchtest und auch, was das p++ in Zeile 8 soll, such mal nach "Zeigerarithmetik".
Achja, bitte nicht "If-Schleife" sagen. If ist keine Schleife

gruß
Martin
-
Auch wenn das eher ins C Forum gehört (der Code enthält nichts was ihn als C++ Code kennzeichnet) mal eine Antwort...
julchen81 schrieb:
...p ist also ein Zeiger auf ein char-Objekt. Mit strstr(Buffer, TestString) wird diesem p die Adresse der Stelle angezeigt, an der TestString im Buffer vorkommt.
Ungünstige Formulierung, Besser: zugewiesen (p enthält anschließend ja die Adresse an der entsprechenden Stelle)
julchen81 schrieb:
Soweit denke ich stimmt das, oder?
Was mir jetzt unklar ist: was bedeutet if ('R' != p[0])? Heißt das, falls die Adresse nicht mit 'R' beginnt?Du musst hier eins Wissen: Die Arraysyntax kann man auch auf Zeiger anwenden. p[0] besagt: gibt mir das erste Element ausgehend von der Adresse p zurück (p[0] ist also der Inhalt der Speicherzelle auf die p verweist). Da es sich hier um einen Zeiger auf char handelt, ist hierbei ein char gemeint.
"if ('R' != p[0])" Besagt also Wenn das Zeichen an der Adresse p kein 'R' ist dann...
cu André
P.S: Bitte demnächst das richtige Forum verwenden.
-
hey,
ich bin mir jetzt nicht sicher, ob ich das so ganz verstanden habe:
wenn also z.B. TestString = "R10", dann liefert doch p[0] ein R, weil dieser TestString mit einem R beginnnt. p[0] liefert also das erste Zeichen dieses TestStrings?
Würd mich freuen, noch mal von dir zu hören...

Und danke für den Tipp mit der if-Schleife (war jetzt aber das letzte Mal, dass ich das schreib!), mir kam dieser Ausdruck sowieso irgendwie eigenartig vor.
Julia
-
julchen81 schrieb:
ich bin mir jetzt nicht sicher, ob ich das so ganz verstanden habe:
wenn also z.B. TestString = "R10", dann liefert doch p[0] ein R, weil dieser TestString mit einem R beginnnt. p[0] liefert also das erste Zeichen dieses TestStrings?
Ein C-String ist nichts anderes als ein Array von Werten.
In deinem Beispiel (TestString = "R10") würde:
p[0] = 'R'
p[1] = '1'
p[2] = '0'
p[3] = '\0'
sein...cu André
P.S: Wenn du C++ verwendest bitte möglichst auch std::string statt char-Arrays verwenden, wirst es damit leichter haben.
-
Wie hübsch, ich hab's verstanden

Und dank dir auch für den zusätlichen Tipp zu std::string, aber ich hab den Code nicht selbst programmiert, der ist aus dem Beispielprogramm, das ich durcharbeiten muss.
Liebe Grüße und noch einen schönen Tag!
Julia
-
Vieleicht hilft dir dieses construct auch noch.
Wenn p ein Pointer ist, dann sind folgende Ausdrucke equivalent.
p[0] equivalent zu *(p + 0)