Arrays Flashcards

1
Q

Array - Deklaration

A
Datentyp Bezeichner[Anzahl_der_Elemente];
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Gibt es in C Arrays mit verschiedenen Datentypen?

A

Nein

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Gibt es grenzen für die Größe eines Arrays?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Wie sieht der Indizierungsoperator aus?

A
[]
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Was macht der Indizierungsoperator?

A

Er dient zum indizierten Zugriff auf Datentypen, die typischerweise hintereinander im Speicher abgelegt sind.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Welches Indize hat der n-te Wert bei einem Datenfeld?

A

n-1

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Warum hat der Indize immer ums 1 kleiner als die Stelle an der der Wert ist?

A

Weil man bei 0 anfängt zu zählen, der erste Wert ist also an Stelle 0 und nicht 1.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Wie greife ich mit dem Indizierungsoperator auf den n-ten Wert zu eines Arrays zu?

A
Arraybezeichner[n-1];
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Was für ein Fehler kann zurückgegeben werden, wenn auf ein Element auserhalb des reservierten Bereichs beim Array zugegriffen wird?

A

segmentation fault

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

überprüfen Compiler bei der übersetzung eines Programms, ob solche segmentation faults auftreten?

A

Normaler weise nein.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Wie kann ich Arrays direkt bei der Deklaration initalisieren?

A
Datentyp Bezeichner[] = {x, j, k, ...};
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Was sollte man bei der Deklaration von Arrays angeben, wenn man sie initialisiert, muss man aber nicht?

A

Die Feldgröße

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Welche Feldgröße kriegt ein Array, wenn man diese nicht bei der Deklaration und Initalisierung angibt?

A

Die Anzahl der Elemente in der Initialisierungsliste

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

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?

A

Die ersten Felder bekommen die Werte aus der Initalisierungsliste, die anderen bekommen automatisch den Wert 0.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

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?

A

Das Array ist nur so groß wie in der Feldgröße angegeben und die restlichen Werte von der Initalisierungsliste werden Ignoriert.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Wie kann man einfach einen Array der größe n mit allen Feldern auf 0 erschaffen?

A
int i[n] = {};
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Mit welcher Funktion kann alle Elemente von einem Arrays auf eine bestimmten Wert setzen?

A
void *memset(void *adres, int zeichen, size_t n);
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

In welcher Headerdatei ist die Funktion memset definiert?

A

string.h

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Wie funktioniert memset?

A
  • 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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Kann man mit Memset auf Multidimensionale Arrays beschreiben?

A

Ja

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Was gilt für statische und globale Arrays im gegensatz zu lokalen Arrays für die Werte in ihnen?

A

Bei statischen und globalen Arrays haben die Werte in ihnen Automatisch den Wert 0, auch wenn keine Initialisierungsliste angegeben wird.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Mit welcher Funktion Funktion kann man vergleichen zwei Arrays die gleichen Elemente haben?

A
int memcmp(const void *adr1, const void *adr2, size_t n);
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Was macht die Funktion genau?

A
  • 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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

In welcher Headerdatei ist die Funktion memcmp definiert?

A
string.h
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Wie kann man mit die Anzahl der Elemente in einem Array ermitteln?

A
sizeof(array)/sizeof(datentyp)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Wie werden Arrays an Funktionen übergeben?

A

Als Call-by-Reference Variable. Das heißt es wird die Adresse der Variable/des ersten Elements übergeben. Es wird also ein Pointer übergeben.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

Wie kann man arrays aus einer Funktion zurückgeben?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

Worauf muss man achten wenn man ein Array aus einer Funktion aus Pointer zurückgibt?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

Wie kann ich mehrdimensionale Arrays deklarieren?

A
Datentyp Bezeichener[Zeile][Spalte] ... = {{...},{...}, ...};
30
Q

Wie sind die Klammern bei der initialisierung von mehrdimensionalen Arrays geschachtelt?

A

Um so weiter die Eckige Klammer hinten bei der Deklaration, um so tiefer sind die Geschweiften Klammern in den anderen Geschweiften Klammern. Bsp.:

array[2][4] = {{x,x,x,x}, {x,x,x,x}};
array[2][3][1] = {{{x},{x},{x}},{{x}{x}{x}}};
31
Q

Wie kann ich ein mehrdimensionales Array an eine Funktion übergeben?

A

Ein mehrdimensionaler Array wird nicht als Pointer auf ein Pointer übertragen sondern als ein Pointer auf ein Array. Daher muss für alle Dimensionen nach der ersten die Dimension in der Funktionsdeklaration angegeben sein. Mann kann diese auf auf zwei möglichkeiten schreiben:
* int feld[][SPALTE]
* int (*ptr)[SPALTE]

32
Q

Welche Einschränkung gibt es bei der übergabe von mehrdimensionalen Arrays and eine Funktion?

A

Alle Dimensionen nach der ersten müssen vor der Übersetzung bekannt sein, da diese bei der Compilierung er Funktion in dessen Deklaration angegeben sein muss.

33
Q

Warum müssen alle Dimensionen nach der ersten bei der Funktionsübergabe angegeben werden?

A

Weil ein mehrdimensionales Array nicht als Pointer auf Pointer aufgelöst wird sondern als Pointer auf Arrays. Damit muss der Compiler, um die Adresse aufzulösen wissen wie groß die tieferen Dimensionen sind.

34
Q

Wie kann man dynamische Mehrdimensionale Arrays an eine Funktion übergeben?

A

In dem der Array als Pointerarray definiert ist. Das heißt es wird ein Pointer auf ein Pointer definiert und der Speicherplatz wird dynamisch reserviert.

35
Q

Wie wird ein String in C gespeichert?

A

Es wird als ein array von Chars gespeichert

36
Q

Wie kann ich einen String in ein Array bei der Initialisierung einlesen

A

~~~
char hallo[] = {‘H’, ‘a’, ‘l’, ‘l’, ‘o’, ‘\0’};
char hallo[] = {“Hallo}

37
Q

Wie kann ich ein String über mehrere Zeilen initialisieren?

A
char big[] = {
        "Hund und Katze "
        "sind nicht ohne"
};
38
Q

Worauf muss man achten wenn man mit scanf() Strings einlesen möchte?

A

scanf hört nach einem Whitespace Zeichen auf Werte in eine Variable einzulesen. Daher kann man kein String, der ein Leerzeichen hat so einfach einlesen

39
Q

Mit welcher Funktion kann man Strings einlesen. Gib die Funktionsdeklaration an

A
char *fgets(char *string, int anzahl_zeichen, FILE *stream);
40
Q

In welchem Header ist die Funktion fgets definiert?

A

stdio.h

41
Q

Was macht die Funktion fgets?

A
  • nimmt Pointer auf die Anfangsadresse des Array
  • max Anzahl an einzulesenden Zeichen
  • File aus dem eingelesen werden soll
  • lies aus File in das Array ein, wobei die letzten beiden Zeichen immer \n, \0 sind, da die Eingabe immer mit einem Enter bestätigt wird und ein String mit \0 enden muss. Daher kann bei bei 100 Zeichen real nur 98 einlesen.
42
Q

Mit welcher Funktion kann man Strings aneinanderhängen?

A

strcat()

43
Q

Was macht die Funktion strcat()?

A

Sie hängt den String s2 an das Ende des Strings s1 an.

44
Q

strcat() - Definition

A
#include<string.h>

char *strcat(char *s1, char *s2);
45
Q

Warum ist das benutzen von strcat gefährlich?

A

Es wird nicht überprüft ob der String von der länge in den anderen String passt und es kann über den offiziellen Speicherbereich hinaus geschrieben werden.

46
Q

Was macht die Funktion strchr?

A

Bei ihr wird ein String und ein Zeichen angegeben, und es wird ein Pointer auf das erste auftreten des Zeichens zurückgegeben. Wennn das Zeichen im String nicht auftritt, dann wird ein NULL Pointer zurückgegeben.

47
Q

strchr() - Definition

A
#include<string.h>

char *strchr(const char *s, int ch);
48
Q

strcmp() - Definition

A
#inlude<string.h>

int strcmp(const char *s1, const char *s2);
49
Q

Was macht die Funktion strcmp()

A

Sie vergleicht zwei Strings. Sind beide gleich wird 0 zurückgegeben. Ist s1 kleiner als s2 wird ein Wert kleiner 0 zurückgegeben, sonst wird ein Wert größer 0 zurückgegeben.

50
Q

strcpy() - Definition

A
#include<string.h>

char *strcpy(char *s1, const char* s2);
51
Q

Was macht die Funtktion strcpy()

A

Sie kopiert den String s2 in s1 rein und gibt auch noch einmal den kopierten String zurück.

52
Q

strcspn() - Definition

A
#include<string.h>

int strcspn(const char *s1, const char *s2);
53
Q

Was macht die Funktion strcspn()

A

Sie gibt die länge bis zum ersten Auftreten eines Zeichen aus s2 in s1 an.

54
Q

strlen() - Definition

A
#include<string.h>

size_t strlen(const char *s1);
55
Q

Was macht die Funktion strlen()

A

Sie gibt die Anzahl der Zeichen in einem String ohne das String-Ende-Zeichen zurück.

56
Q

strncat() - Definition

A
#include<string.h>

char *strncat(char *s1, const char *s2, size_t n);
57
Q

Was macht die Funktion strncat()

A

Das gleiche wie strcat(), aber es wird noch angegeben wie viele Zeichen max angehangen werden. Damit ist strncat() wesentlich sicherer und strcat() stets vorzuziehen.

58
Q

strncmp() - Definition

A
#include<string.h>

int strncmp(const char *s1, const char *s2, size_t n);
59
Q

Was macht die Funktion strncmp()

A

So wie strcmp() nur das n Zeichen mit einander verglichen werden.

60
Q

strncpy() - Definition

A
#include<string.h>

char *strncpy(char *s1, const char *s2, size_t n);
61
Q

Was macht die Funktion strncpy()

A

Das gleiche wie strcpy() nur das hier n Zeichen ohne das ‘\n’ Zeichen Kopiert werden.

62
Q

Was macht die Funktion strpbrk()

A

Ähnlich wie strcspn() nur das hier ein Pointer auf das erste Auftreten eines Zeichens aus s2 zurückgegeben wird.

63
Q

strpbrk() - Definition

A
#include<string.h>

char *strpbrk(const char *s1, const char *s2);
64
Q

strrchr - Definition

A
#inlude<string.h>

char *strrchr(const char *s, int ch);
65
Q

Was macht die Funktion strrchr()

A

Ähnlich wie strchr() nur das die Adresse vom letzten auftretenden Zeichen zurückgegeben wird.

66
Q

strspn() - Definition

A
#include<string.h>

int strspn(const char *s1, const char *s2);
67
Q

Was macht die Funktion strspn()

A

Gibt die Position vom ersten Zeichen in s1 aus, das nicht in s2 ist.

68
Q

Was macht die Funktion strstr()

A

Ein String s1 wird darauf hin untersucht ob ein zweiter Teilstring s2 in s1 ist. Wenn ja wird dessen Anfangsadresse zurückgegeben

69
Q

strstr() - Definition

A
#include<string.h>

char *strstr(const char *s1, const char *s2);
70
Q

strtok() - Definition

A
#include<string.h>

char *strtok(char *s1, const char *s2);
71
Q

Was macht die Funktion strtok()

A

Zerlegt den String s1 an den stellen, wo die Zeichen aus s2 vorkommen. Dabei wird der vordere Teil von s1 zurückgegeben und der Restteil wird von der Funktion zwischengespeichert. Wenn man auf den zwischengespeicherten Teil zugreifen möchte muss man für s1 NULL angeben.