#include <stdint.h>

void main(void) {
	// Array mit drei Elementen, wobei die Elemente Zeiger
	// auf uint8_t enthalten
	uint8_t *a[3];

	// Zeiger auf einen konstanten uint8_t
	const uint8_t *b;

	// Konstanter Zeiger auf einen uint8_t
	uint8_t * const c;

	// Zeiger auf eine Funktion mit Rückgabewert vom Typ
	// uint8_t und einem Übergabeparameter vom Typ int
	uint8_t (*d)(int);

	// Funktion mit Rückgabewert vom Typ Zeiger auf uint8_t
	// und einem Übergabeparameter vom Typ int
	uint8_t *e(int);

	// Funktion mit Rückgabewert vom Typ Zeiger auf Zeiger
	// auf uint8_t und einem Übergabeparameter vom Typ int
	uint8_t **f(int);

	// Zeiger auf konstanten Zeiger auf konstanten uint8_t
	const uint8_t * const *g;

	// Zeiger auf eine Funktion mit Rückgabewert vom Typ
	// Zeiger auf uint8_t und einem Übergabeparameter vom
	// Typ int
	uint8_t *(*h)(int);

	// == identisch zu d ==
	// Zeiger auf eine Funktion mit Rückgabewert vom Typ
	// uint8_t und einem Übergabeparameter vom Typ int
	uint8_t (*i)(int);

	// Array mit 3x4 Elementen, wobei die Elemente Zeiger
	// auf konstante uint8_t enthalten
	const uint8_t *j[3][4];

	// Array mit drei Elementen, wobei die Elemente
	// Zeiger auf Funktionen mit dem Rückgabewert
	// Zeiger auf uint8_t und zwei Parametern enthalten
	//     Parameter 1: Zeiger auf eine Funktion mit
	//                  Rückgabewert vom Typ int und
	//                  einem Übergabeparameter vom
	//                  Typ Zeiger auf "void"
	//     Parameter 2: Zeiger auf "void"
	uint8_t *(*o[3])(int (*p)(void *q), void *r);

	// == Anders herum: wie definiert man ==

	//- einen Zeiger "s" auf konstante uint8_t-Werte?
	const uint8_t *s;

	//- ein Feld "t" mit 3 Elementen, die jeweils
	//  einen konstanten Zeiger auf uint8_t-Werte
	//  enthalten?
	uint8_t *const t[3];
}
