\begin{slide}{Felder (Arrays)}
  
Design-Entscheidungen:
\begin{itemize}
\item
  welche Index-Typen erlaubt? (Zahlen? Aufzählungen?)
\item
  Bereichsprüfungen bei Indizierungen? 
\item
  Index-Bereiche statisch oder dynamisch?
\item
  Allokation statisch oder dynamisch?
\item
  Initialisierung?
\item
  mehrdimensionale Felder gemischt oder rechteckig?
\end{itemize}

\end{slide}

\begin{slide}{Felder in C}

\begin{verbatim}
int main () {
    int a [10][10];
    a[3][2] = 8;
    printf ("%d\n", a[2][12]);	
}
\end{verbatim}
statische Dimensionierung,
dynamische Allokation,
keine Bereichsprüfungen.


\bigskip
Form: rechteckig, Adress-Rechnung:
\begin{verbatim}
int [M][N];
a[x][y]  ==>  *(&a + (N*x + y))
\end{verbatim}
\end{slide}


\begin{slide}{Felder in Java}

\begin{verbatim}
int [][] feld = 
         { {1,2,3}, {3,4}, {5}, {} };
for (int [] line : feld) {
    for (int item : line) {
       System.out.print (item + " ");
    }
    System.out.println ();
}
\end{verbatim}

dynamische Dimensionierung und Allokation,
Bereichsprüfungen. Nicht notwendig rechteckig.

\end{slide}

\begin{slide}{Felder in C\#}

Unterschiede zwischen
\begin{itemize}
\item \verb|int [][] a|
\item \verb|int [,]  a|
\end{itemize}
in
\begin{itemize}
\item Benutzung (Zugriff)
\item Initialisierung durch Array-Literal
\end{itemize}
  
\end{slide}

\begin{slide}{Nicht rechteckige Felder in C?}

Das geht:
\begin{verbatim}
int a [] = {1,2,3};
int b [] = {4,5};
int c [] = {6};
    e    = {a,b,c};
printf ("%d\n", e[1][1]);
\end{verbatim}
aber welches ist dann der Typ von \verb|e|?

(es ist nicht \verb|int e [][]|.)
\end{slide}



\begin{slide}{Dynamische Feldgrößen}

\parskip 10pt

Designfrage: kann ein Feld (auch: String) 
seine Größe ändern?

(C: wird sowieso nicht geprüft, Java: nein, Perl: ja)

in Java: wenn man das will, dann will man
statt Array eine LinkedList, statt String einen StringBuffer.

wenn man mit Strings arbeitet, 
dann ist es meist ein Fehler:

benutze Strings \emph{zwischen} Programmen, \\
aber niemals \emph{innerhalb} eines Programms.

ein einem Programm: benutze immer anwendungsspezifische
Datentypen.

\dots deren externe Syntax spiel überhaupt keine Rolle

\end{slide}
