Klicken Sie Zeilen an, die mit + markiert sind. Dort ist Hilfeinformation hinterlegt.
In C muss man hier leider eine explizite Typanpassung auf const notieren. In C++ kann das entfallen.
In C muss man hier leider eine explizite Typanpassung auf const const notieren. In C++ kann das entfallen.
Eingabeparamter n. Die ganze Zahl wird beim Funktionsaufruf in den Parameter kopiert.
Eingabeparamter s. Der String wird beim Funktionsaufruf nicht kopiert, sondern s wird mit der Adresse des ersten Zeichens initialisiert. Die Funktion kann den String nicht ändern, weil s ein Zeiger auf konstantes Zeichen ist.
Eingabeparameter a. Der Parameter a ist ein Zeiger, so wie s bei print_string. Lassen Sie sich von der Schreibweise mit den eckigen Klammern nicht täuschen. Das ist nur syntaktischer Zucker für menschliche Leser. const int *a wäre auch richtig, bedeutet das gleiche und zeigt, dass bei Arrays immer nur die Anfangsadresse an eine Funktion übergeben werden kann. Es ist deshalb auch sinnlos, in den eckigen Klammern eine Array-Größe anzugeben.
Eingabeparameter d. Hier verwendet man den Zeiger aus Laufzeitgründen. Der struct date ist bei LP64 mit Alignment 24 Byte groß, also dreimal so groß wie ein Zeiger. Deshalb übergibt man lieber die Anfangsadresse statt eine Kopie der Struktur.
Die Funktion ist für ein zweidimensionales Array gedacht (Array von Arrays).
In dieser Form ist sie allerdings unflexibel, weil sie nur für eine Matrix mit zwei Spalten funktioniert. Dafür kann man in der Implementierung mit xy[i][j] zugreifen. Man könnte auch eine Deklaration const int (*xy)[2] schreiben (siehe matrixpointer.c).
Die Funktion ist wie die vorhergehende für ein zweidimensionales Array gedacht (Array von Arrays).
Diese Version funktioniert nun aber für beliebige Matrizen. Dafür muss allerdings in der Implementierung mit Indexarithmetik xy[i * m + j] gearbeitet werden, weil dem Compiler die Recheneinheit für den Sprung von Zeile zu Zeile fehlt.
Dank Indexarithmetik kann man eine eindimensionales Array wie ein zweidimensionales benutzen.
Hier ist die auszugebende Matrix im Java-Stil aus mehreren Arrays zusammengesetzt (Array von Zeigern). Das linke const sorgt dafür, dass die ganzen Zahlen nicht änderbar sind, und das rechte const sorgt dafür, dass die Adressen der Zeilen nicht änderbar sind.