C#.NET / C#.NET Grundlagen / 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
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.
V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn
☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de