5. Übung
Bearbeitung vom 22.11.06 - 27.11.06
Aufgabe 1: Arrays
Mit dem Pointer pa läßt sich auf beliebige Arraykomponenten zugreifen. Per Definition zeigt nämlich
(pa+1) auf das nächste Arrayelement, also a[1]. *(pa+1) ergibt den Wert, der unter
a[1] abgespeichert ist. Allgemein gilt, daß (pa+i) auf a[i] verweist und *(pa+i) den Wert a[i] besitzt. Es ist sogar erlaubt, den Zugriff *(pa+i) wie den üblichen Zugriff
auf Arrays zu spezifizieren, also pa[i]. Zusammenfassend kann man die Werte des Arrays ansprechen mit
a[4] = pa[4] = *(pa+4) = *(a+4) = 4[a].
Man bedenke also immer, daß ein Vektor nichts anderes ist als ein konstanter Zeiger (kann daher nicht verändert
werden) auf den Anfang des Vektors ist. Dieses ist insbesondere dann von Bedeutung, wenn Vektoren als Parameter
von Funktionen oder als Ergebnis einer Funktion definiert werden. Die Angabe a[i] ist eine Kurzschreibweise
für *(a+i) , wobei a den Anfang des Vektors angibt (konstanter Zeiger). Da diese Addition
kommutativ ist, gilt für die Addressrechnung *(a+i) = *(i + a). Daher läßt sich kurioserweise
die Vektorkomponente auch mit i[a] ansprechen. Der C++ Compiler sieht dieses (bis jetzt noch) nicht als
Fehler an. Unsrere Lösung ist also:
cout << pa << endl; 0xbfffa600 Adresse von a[0]
cout << a[4] << endl; 4 Wert des 4.ten Elementes
cout << &(*pa) << endl; 0xbfffa600 Zeiger des 0.ten Elementes ( = pa)
cout << *(pa+8) << endl; 8 Wert des 8.ten Elementes
cout << pa+1 << endl; 0xbfffa604 Adresse des 1.ten Elementes
(+4 dezimal bei Integer- Werten)
cout << pa[5] << endl; 5 Wert des 5.ten Elementes
(aufpassen: nicht der Zeiger
auf 5. Element !!!
cout << &a[2] << endl; 0xbfffa608 Adresse des 2.ten Elementes
(+ 2*4 dezimal bei Integer)
cout << *(7+a) << endl; 7 Wert des 7.ten Elementes
cout << 3[a] << endl; 3 Wert des 3.ten Elementes
cout << &3[a] << endl; 0xbfffa612 Adresse des 3.ten Elementes
(+3*4 dezimal bei Integer)
Aufgabe 2: Character- Arrays
Die ursprüngliche Lösung ist in string_correct.cc wiedergegeben.
Aufgabe 3: Funktionsaufrufe
Die Übergabe als Pointer und als Referenz ist in swap1 und swap2 gezeigt. swap3 und
swap4 machen das gleiche, aber ohne die Hilfsvariable. Nur für Leute mit kleinem RAM- Speicher
zu empfehlen ( siehe swap.cc ).
Aufgabe 4: Arrays als Funktionsargumente (Zusatzaufgabe)
Das Programm ist in string_function.cc gelisted.
Harm Fesefeldt
2006-11-21