Pointer auf Variablenadressen

Gast #1797646
Lesenswert?
• ▲
▼
Hallo,
wollte mal fragen ob jeman weiß wie ich das Problem lösen kann:
1
char *i = &a;
2
char *a = &i;

Es mag zwar doof aussehen aber es hat schon seinen sinn :-)
Grund für dieses Konstrukt ist, dass ich für eine graphische Oberfläche 
Menüstriktogramme erstellt haben die jeweils die Adresse des vorherigen 
und des nachfolgenden Menüstruktogrammens enthalten sollen.

Grüße, Benny.
Persönliche Seite #1797669
Lesenswert?
• ▲
▼
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.
#1797672
Lesenswert?
• ▲
▼
ben.pu schrieb:

> Es mag zwar doof aussehen

Dein Beispiel?

> aber es hat schon seinen sinn :-)

Nö, das ist sinnlos. Sieh dir einfach mal die Datentypen an. Das kann 
nicht gehen.

> Grund für dieses Konstrukt ist, dass ich für eine graphische Oberfläche
> Menüstriktogramme erstellt haben die jeweils die Adresse des vorherigen
> und des nachfolgenden Menüstruktogrammens enthalten sollen.

Das ist aber was anderes.
Machs nicht über Initialisierungen, sondern als normale Zuweisungen.
Je nachdem wie dein Code konkret aussieht, kann man auch was mit 
Deklaration / Definition machen.
1
struct menu {
2
  ...
3
  struct menu * prev;
4
  struct menu * next;
5
};
6

7
// das sind erst mal nur Deklarationen. Ihr Zweck ist es, dass
8
// der Compiler erst mal weiß dass es 2 Variablen namens Punkt1
9
// u. Punkt2 gibt
10
extern struct menu Punkt1;
11
extern struct menu Punkt2;
12

13
// und jetzt die eigentlichen Variablen. Da Punkt1 und Punkt2 prinzipiell
14
// ja schon bekannt sind, kann man sich auch auf sie beziehen
15
struct menu Punkt1 = { ..., NULL, &Punkt2 };
16
struct menu Punkt2 = { ..., &Punkt1, NULL };
17

18
....

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.