Nov
2
2008
Zeiger, Referenzen in Kombination mit Arrays (C++)
Leider wird in meinem tollen Büchlein, hier neben mir, Zeiger und Referenzen nicht in Kombination mit Arrays behandelt. Alles hab so wild! Dann schreibe ich mir eben ein eigenes Listing! Auch euch will ich es nicht vorenthalten. Ich habe jede Programmzeile anhand von aussagekräftigen Kommentaren genau erläutert. Sicherlich gibt es an dem Listing ein paar Sachen zu kritisieren, den Fokus hab ich allerdings auf die Einfachkeit gesetzt; außerdem haben mir bereits einige Leute, welche bereits sehr vertraut mit der Programmiersprache C++ sind, versichert, dass es vollkommen fehlerfrei ist.
Und hier das Listing:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | //Zeiger und Referenzen in Kombination mit Arrays // //Ein persönliches Experiment // // #include <iostream> using namespace std; int main () { //Variablen char Variable = 'S'; char _array[] = "Simon"; //Zeiger und Referenz darauf verweisen // char *pZeiger0 = &Variable; char *pZeiger = _array; //Bemerkt? Der Adressoperator vor _array wird weggelassen //Der Adressoperator wird deswegen weggelassen //weil es sich um einen Array handelt und um //keine "normale" Variable! //_array ist (eigentlich nicht, aber es wird implizit gecastet) ein Zeiger aufs erste Element des Arrays. //Zeiger können sich mit Hilfe von Datentyp und sizeof(Datentyp) //die restlichen Elemente errechnen. //Wenn ein Parameter einer Funktionen einen Zeiger verlangt, so muss man die Adresse der Variable, //die man übergeben will angeben: &Variable. ODER einen String (sofern es ein char -Array ist). //Warum (?): Durch die Nullterminierung kennt der Compiler die Anzahl der Elemente eines Arrays; //ohne, also bei Datentypen außer char, nicht! (Auch hier gibt es Möglichkeiten, dies //ohne Terminierung zu ermöglichen) char &rReferenz = _array[0]; //oder: char &rReferenz = *_array; //Warum(?): Arrays funktionieren im Prinzip wie Zeiger. //"wenn man den dereferenzierungsoperator auf ein array benutzt bekommt //man das erste element zurück" //Im Gegensatz zu Zeigern, speichern Referenzen keine Adressen. Sie sind //im Prinzip ein anderer Bezeichner für ihr Dereferenzierungs- //objekt. Bei der Parameterübergabe gibt es, genau wie auch //bei den Zeigern, bei großen Objekten, //allerdings nicht bei Array, welche eine Ausnahme bilden und auch genauso //viel Performence wie ein Zeiger darauf beiten würden, //einen deutlichen Performanceunterschied. //Trotzdem werden auch noch Zeiger auf Arrays, anstatt von nen Array "direkt" //zu übergeben, lieber bei der Parameterübergabe verwendet. //Sogar Referenzen können mit Hilfe einer recht umständlichen //Syntax mehreren Elementen eines Arrays zugewiesen werden. //Jedoch werden in dieser Hinsicht Zeiger bevorzugt ver- //wendet! cout << "Direkt: _array: " << _array << endl; //(Genaugenommen ist es hier auch indirekt.) cout << "Indirekt/Dereferenzierung: pZeiger: " << pZeiger << endl; cout << "Indirekt/Dereferenzierung: rReferenz: " << rReferenz << endl; //warten int warten; cin >> warten; //return return 0; } |