Arrays:
Arrays sind Kollektionen von Objekten derselben Art,
die aufeinanderfolgend
im Speicher angelegt werden.
int n[20]; // Deklaration von int array mit 20 Elementen // direkter Zugriff auf einzelne Elemente mittels [index] // aber Vorsicht, C/C++ zaehlt von 0 bis N-1 n[0] = ...; //1. Element ... n[19] = ...;// Letztes Element // Auch direkte Initialisierung moeglich, // dann keine Dimensionierung noetig double x[] = { 2.7, 8.1, 9.0, 27.4, 1.45e8, -0.886e-50 }; // // Ausgabe 1. und letztes Element cout << x[0] << " " << x[5] << endl;
In modernem C++ wird weitgehend auf die Verwendung von Standard Arrays verzichtet und stattdessen der STL Vector (vector<Type>) verwendet. Dieser ist wesentlich flexibler in Bezug auf dynamisches Erzeugen, Erweitern, Initialisieren, etc.
Pointer:
Ein Pointer ist eine Variable, die eine Speicheradresse enthält.
int b = 42; int *pb; // pb deklariert als pointer auf int pb = &b; // & ist Adress operator, liefert Adresse von b cout << b << endl; cout << pb << endl; // Kryptische Adresse cout << *pb << endl; // De-referenzieren: *pb == b double x = 7.256; double *px = &x; // px deklariert als pointer auf double px = &b; // illegal pointer auf double kann nicht Adresse von int nehmen
... oder ein
Array:
int a[5] = { 1, 2, 3, 4, 5}; // direct array initialisation ! int *pa = a; cout << pa[2] << endl; // array-syntax for pointer cout << *(a+2) << endl; // pointer-syntax for arrays pa += 2; cout << *pa << endl; // .. 3 a += 2; // illegal, no pointer arithmetics for arrays
int c = 55; int d = 66; int *pc; *pc = d; // illegal, pointer zeigt ins jenseits: --> core dump pc = &d; // ok, nun zeigt er auf d *pc = c; // ok, Wert bei d wird ueberschrieben
Nicht–initialisierte Pointer gefährlich:
Pointer sind für eine Reihe von Aufgaben unverzichtbar:
Allerdings ist die Verwendung heikel, kleine Programmier–Fehler können zu bizarren, schwer zu findenden Laufzeit–Fehlern führen.
In C werden Pointer sehr häufig verwendet für Arbeiten mit character strings (char *) , für Parameterübergabe bei Funktionsaufrufen ( später), u.v.m.
In C++ deutlich reduziert, an vielen Stellen kann man mit Referenzen arbeiten, STL container anstelle dynamischer Arrays verwenden, ...