/*
Programm: Test.Dekl 
Zweck:    Test von Moeglichkeiten zru Deklaration
Aufgabe:  Herausfinden der richtigen Grammatik zur Deklaration ohne typedef 
          bei schwierigen Kombinatione von Zeigern, Feldern und Funktionen 
Autor:    Mattias Ansorg <ansis@gmx.de>
Lizenz:   public domain
Datum:    2002-09-09
*/

#include <iostream>
#include <string>
using namespace std;

/* Eine Funktion, die einen Zeiger auf ein Feld von 8 char als 
   Ergebnis liefert, d.h. vom Typ char (*)[8]
 */   
char (*function1())[8] {
  char (*p)[8] = (char(*)[8]) new char[8];
  return p;
}

/* Ein Zeiger p auf eine Funktion, die ein Feld von 8 char als 
   Ergebnis liefert. Man beachte die unterschiedliche Klammerung im
   Vergleich mit function1! p ist selbst keine Funktion, kann aber 
   genau wie eine Funktion verwendet werden, wenn die Startadresse 
   einer passenden Funktion p zugewiesen wird.
 */   
char (*p)()[8];

/* Ein Feld z von 8 Zeigern auf Funktionen. Diese Funktionen liefen ein 
   char als Ergebnis.
 */
char (*y[8])()  = {0,0,0,0,0,0,0,0};

//char (*)() z[8] = {0,0,0,0,0,0,0,0}; sollte aequivalent zu y sein, wird von 
//g++ aber nicht akzeptiert

int main () {
}

