C#.NET * C++ * JAVASCRIPT * PYTHON * DIVERSES
XML * XML-SCHEMA * XPATH * XSL * XSL-FO * SVG * XQUERY * XPROC * ANT



C#.NET / C#.NET Grundlagen / Arrays

Arrays

Arrays

➪ Sie können sich ein Array als eine Tabelle von Einzelwerten vorstellen, die denselben Datentyp haben.

Auf dieser Seite:

Ein solches Feld können Sie in C#.NET deklarieren und wieder auswerten:


int[] feld = { 13, 15, 11, 19, 17 };
for (int i = 0; i < feld.Length; i++)
{
    Console.WriteLine("{0}\t{1}", i, feld[i]);
}

Das Ergebnis ist recht einfach: Die linke Spalte zeigt des Index des Arrays, die rechte Spalte dessen Wert.


0       13
1       15
2       11
3       19
4       17

Exkurs: Arrays und Pointer in C/C++

Damit Sie sehen können, wie komfortabel Sie in C#.NET arbeiten können und welche Akrobatik Ihnen gegenüber früheren Sprachen erspart bleibt, möchte ich Ihnen gern zeigen, wie derselbe Vorgang in C/C++ implementiert werden könnte.

Neben dem Abschreckungseffekt ist das Beispiel auch lehrreich: Sie können hier ein Verständnis für die interne Arbeitsweise des Systems gewinnen, das Ihnen auch beim Kapitel Objektorientierung helfen dürfte.

Im folgenden C/C++ Code finden Sie nach der Deklaration und Initialisierung des Arrays die Zeile int* zeiger;. Hier wird ein Pointer definiert. Ein Pointer ist eine Variable, deren Inhalt eine Speicheradresse ist. Diese wird zugewiesen in zeiger = &feld[i];.


int feld[5];
*feld       = 13; // erster  Wert an Stelle 0
feld[1]     = 15; // zweiter Wert an Stelle 1
*(feld + 2) = 11; // dritter Wert an Stelle 2
*(feld + 3) = 19; // vierter Wert an Stelle 3
feld[4]     = 17; // fünfter Wert an Stelle 4
int* zeiger;
for (int i = 0; i < 5; i++)
{
    zeiger = &feld[i];       // zeiger übernimmt die 
                             // jeweilige Speicheradresse 
    cout << i       << "\t"  // Index 
         << *zeiger << "\t"  // Wertinhalt der jew. Feldadresse
         << zeiger  << "\t"  // die jeweilige Speicheradresse
         << &zeiger << endl; // Speicheradresse des Pointers
}
delete zeiger;

0       13      005CF850        005CF844
1       15      005CF854        005CF844
2       11      005CF858        005CF844
3       19      005CF85C        005CF844
4       17      005CF860        005CF844

An diesem Beispiel zeigt sich die grundsätzlich andere interne Verarbeitungsweise in C#.NET gegenüber den Vorgängerversionen C/C++. Sind in C/C++ die Speicheradressen für Variablen fix, so befinden sich die Variablen in C#.NET dauernd in Bewegung.

In C#.NET haben Sie nur sehr eingeschränkte Möglichkeiten, solche Spielchen zu treiben. Zunächst ist erforderlich, den Codeblock mit unsafe zu kennzeichnen. Zusätzlich kommen Sie nicht drumherum, im VisualStudio unter Projekt|Eigenschaften im Registerblatt Build den Eintrag Unsicheren Code zulassen zu aktivieren. Erst dann wird das System bereit sein, seine Arbeit zu machen.


unsafe
{
    int* feld   = stackalloc int[5];
    *feld       = 13; // erster  Wert an Stelle 0
    feld[1]     = 15; // zweiter Wert an Stelle 1
    *(feld + 2) = 11; // dritter Wert an Stelle 2
    *(feld + 3) = 19; // vierter Wert an Stelle 3
    feld[4]     = 17; // fünfter Wert an Stelle 4
    int* zeiger;
    for (int i = 0; i < 5; i++)
    {
        zeiger = &feld[i];
        Console.WriteLine("{0}\t{1}", i, *zeiger);
    }
}

wg / 4. April 2021



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.



V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/cs_Arrays.html