Arrays Flashcards
Array - Deklaration
Datentyp Bezeichner[Anzahl_der_Elemente];
Gibt es in C Arrays mit verschiedenen Datentypen?
Nein
Gibt es grenzen für die Größe eines Arrays?
In der Theorie ja. Bei alten Compilern war der Heap auf 64KB beschränkt. Dieses Problem gibt es jedoch heute nicht mehr, da der Heap inziwschen so groß ist das es fast unmöglich ist diesen auszuschöpfen es sei den man programmiert komplexe 3D Spiele. In der Praxis ist dieser also unbeschränkt.
Wie sieht der Indizierungsoperator aus?
[]
Was macht der Indizierungsoperator?
Er dient zum indizierten Zugriff auf Datentypen, die typischerweise hintereinander im Speicher abgelegt sind.
Welches Indize hat der n-te Wert bei einem Datenfeld?
n-1
Warum hat der Indize immer ums 1 kleiner als die Stelle an der der Wert ist?
Weil man bei 0 anfängt zu zählen, der erste Wert ist also an Stelle 0 und nicht 1.
Wie greife ich mit dem Indizierungsoperator auf den n-ten Wert zu eines Arrays zu?
Arraybezeichner[n-1];
Was für ein Fehler kann zurückgegeben werden, wenn auf ein Element auserhalb des reservierten Bereichs beim Array zugegriffen wird?
segmentation fault
überprüfen Compiler bei der übersetzung eines Programms, ob solche segmentation faults auftreten?
Normaler weise nein.
Wie kann ich Arrays direkt bei der Deklaration initalisieren?
Datentyp Bezeichner[] = {x, j, k, ...};
Was sollte man bei der Deklaration von Arrays angeben, wenn man sie initialisiert, muss man aber nicht?
Die Feldgröße
Welche Feldgröße kriegt ein Array, wenn man diese nicht bei der Deklaration und Initalisierung angibt?
Die Anzahl der Elemente in der Initialisierungsliste
Wenn bei der Deklaration eine Initialisierungsliste angegeben ist und die Feldgröße, wobei die Feldgröße größer ist als die Anzahl der Elemente in der Initalisierungsliste, was Passiert mit dem Array?
Die ersten Felder bekommen die Werte aus der Initalisierungsliste, die anderen bekommen automatisch den Wert 0.
Wenn bei der Deklaration eine Initaisierungsliste angegeben ist und die Feldgröße, wobei die Feldgröße kleiner ist als die Anzahl der Elemente ind er Initalisierungsliste, was passiert mit dem Array?
Das Array ist nur so groß wie in der Feldgröße angegeben und die restlichen Werte von der Initalisierungsliste werden Ignoriert.
Wie kann man einfach einen Array der größe n mit allen Feldern auf 0 erschaffen?
int i[n] = {};
Mit welcher Funktion kann alle Elemente von einem Arrays auf eine bestimmten Wert setzen?
void *memset(void *adres, int zeichen, size_t n);
In welcher Headerdatei ist die Funktion memset definiert?
string.h
Wie funktioniert memset?
-
void *adres
krigt die Adresse vom Array -
int zeichen
krigt den Wert, auf den die Elemente gesetzt werden sollen -
size_t n
kriegt die Bytegröße des Arrays
Kann man mit Memset auf Multidimensionale Arrays beschreiben?
Ja
Was gilt für statische und globale Arrays im gegensatz zu lokalen Arrays für die Werte in ihnen?
Bei statischen und globalen Arrays haben die Werte in ihnen Automatisch den Wert 0, auch wenn keine Initialisierungsliste angegeben wird.
Mit welcher Funktion Funktion kann man vergleichen zwei Arrays die gleichen Elemente haben?
int memcmp(const void *adr1, const void *adr2, size_t n);
Was macht die Funktion genau?
- Rückgabewert ist 0,falls beide gleich sind
-
adr1
ist die erste Speicheradresse -
adr2
ist die zweite Speicheradresse -
n
gibt an wie viele Bytes verglicher weden sollen
In welcher Headerdatei ist die Funktion memcmp
definiert?
string.h
Wie kann man mit die Anzahl der Elemente in einem Array ermitteln?
sizeof(array)/sizeof(datentyp)
Wie werden Arrays an Funktionen übergeben?
Als Call-by-Reference Variable. Das heißt es wird die Adresse der Variable/des ersten Elements übergeben. Es wird also ein Pointer übergeben.
Wie kann man arrays aus einer Funktion zurückgeben?
Es gibt zwei Möglichenkeiten
* Einen Pointer auf die erste Adresse des Arrays zurückgeben
* Den Array in eine Struktur packen und diese zurückgeben
Worauf muss man achten wenn man ein Array aus einer Funktion aus Pointer zurückgibt?
Wenn der Array in der Funktion Deklariert wurde endet der Definitionsbereich des Arrays nach der Funktion, heißt der Speicherplatz des Arrays kann überschrieben werden.