# c++ code erklären?!



## Soahc (14. Jan 2011)

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)


```
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 (14. Jan 2011)

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 (14. Jan 2011)

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


----------



## Sonecc (14. Jan 2011)

Schau dir mal an, was ausgegeben wird, der Text gibt dir schon die Antwort darauf.
Wie man an der Ausgabe 
	
	
	
	





```
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)


----------



## Soahc (15. Jan 2011)

Danke!


----------



## LoR (17. Jan 2011)

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.


----------

