c++ code erklären?!

Soahc

Aktives Mitglied
Hallo Zusammen,

ich sitze gerade im Kurs Quallitäts Management und so erklären, was der folgende Code auf dem Bildschirm ausgibt (bitte fragt nicht nach, was das in dem Kurs zu suchen hat - kein Plan)

Java:
int nichtGefundeneZeichen = 0;
char* FindeZeichen(char* Suchmenge, const char Element)
{
char* Zeiger;
for(Zeiger = Suchmenge; *Zeiger; Zeiger++)
if(*Zeiger == Element)
return Zeiger - Suchmenge;
nichtGefundeneZeichen++;
return 0;
}
int AnzahlNichtGefundenerZeichen()
{
return nichtGefundeneZeichen;
}
void Init()
{
nichtGefundeneZeichen = 0;
}
int main(int argc, char*argv[])
{
Init();
printf("Textposition: %d\n", FindeZeichen("Dies ist ein Test", 't'));
printf("Textposition: %d\n", FindeZeichen("Dies ist ein Test", 'a');
printf("Textposition: %d\n", FindeZeichen("Dies ist ein Test", ' ');
printf("Textposition: %d\n", FindeZeichen("Dies ist ein Test", 0);
printf("Nicht gefunden: %d", AnzahlNichtGefundenerZeichen());
}

Da ich während des Studiums aber nur Java, C# und AS programmiert habe, fällt mir diese Pointer-Syntax sehr schwer. Kann mir jemand sagen, was da in FindeZeichen genau passiert?

gruß, Phill
 

Sonecc

Gesperrter Benutzer
Eigentlich relativ einfach. Suchmenge ist ein Zeiger auf ein char Array und Element das gesuchte char.
Suchmenge wird dann durchlaufen und dabei geprüft ob das aktuelle char = Element ist.
 

Soahc

Aktives Mitglied
hi danke erstmal. Das konnte ich soweit auch noch erkennen, aber was genau gibt "return Zeiger - Suchmenge;" denn dann zurück?
 

Sonecc

Gesperrter Benutzer
Schau dir mal an, was ausgegeben wird, der Text gibt dir schon die Antwort darauf.
Wie man an der Ausgabe
Code:
printf("Textposition: %d\n", (...)
erkennen kann: Die Position des gesuchten Zeichens.

Warum?

Zeiger ist die aktuelle Addresse im Speicher. Suchmenge ist die Adresse des ersten Zeichens im Speicher.
Nehmen wir mal an, dass Zeiger den Wert 15 hätte und Suchmenge hätte den Wert 12, dann wird 3 zurückgegeben. (Achtung, die Werte sind alles andere als richtig. Im wirklichen Programmablauf treten ganz andere werte auf, so habe ich die Größe des Datentyps nicht beachtet, außerdem sind die Speicheradressen meist größer. Zu guter Letzt kann bei jedem Aufruf des Programms der Wert anders sein. Beachte also, dass die Werte nur exemplarisch sind)
 

LoR

Bekanntes Mitglied
Ein Nachtrag:

Das ist nicht C++ sondern C. In Standard-C++ würdest du z.B. statt

char* str <-- c stil
string str <-- c++ stil

bzw.

printf("..",..) <-- c stil
cout << ... << endl <-- c++ stil

schreiben. Wobei die Grenzen zwischen beiden Sprachen vergleichsweise (gewollt) fließend sind.
 

Ähnliche Java Themen


Oben