Das geht nicht, weil es syntaktisch falsch ist.
char *i = &a;
Das ist ein Pointer auf char, der auf die Adresse von a zeigt.
Bei a handelt es sich also um einen char.
char *a = &i;
Das ist ein Pointer auf char, der auf die Adresse von i zeigt.
Bei diesem i handelt es sich um einen char, was sich mit der ersten
Definition von i (Pointer auf char) reibt.
Und dieses a ist ebenso als Pointer auf char definiert und nicht, wie
oben gefordert, als char.
Vermutlich willst Du aber etwas ganz anderes erreichen, nämlich eine
Struktur, die Pointer auf andere Strukturen gleichen Typs enthält.
struct bla
{
struct bla * p;
};
extern struct bla b;
struct bla a = { &b };
struct bla b = { &a };
Der Trick besteht hier in der mit "extern" gebauten Vorwärtsdeklaration,
bei der dem Compiler mitgeteilt wird, daß es ein Objekt b gibt, so daß
bei der Initialisierung von a dessen Adresse verwendet werden kann, ohne
daß das Objekt b bereits initialisiert ist.
Das Objekt b wird danach definiert und mit der Adresse von a
initialisiert.