Pointer auf Pointer, oder doch nicht??

Gast #350001
Lesenswert?

Hallo habe eine Struktur

typedef struct{
               int* i
              }STRUKTUR;

jetzt ist klar, lege ich eine Struktur an sollte das so
funktionieren..

int k;
const STRUKTUR s1 = {&k};

nur habe ich jetzt einen int* der je nach einer Auswahl auf eine andere
int Variable zeigt, wie lege ich jetzt eine const Struktur an die mir
dann jeweils auf die richtige Variable zeigt.

int* k;
const STRUKTUR s1 = {??k};

void main()
{
   int moeglichkeit1 = 0, moeglichkeit2 = 2;
   int auswahl = 0;
   switch(auswahl)
   {
      case 0:
         k = &moeglichkeit1;
      break;
      default:
         k = &moeglichkeit2;
      break;
   }
}
#350002
Lesenswert?

In diesem Fall kannst du keine Initialisierung bei der
Deklaration benutzen. Denn diese werden ja ausgeführt, bevor
das Program zu laufen anfängt. Du möchtest aber erst
während das Program läuft, den konkreten Wert festlegen
(dazu später noch mehr).

Das müsste man jetzt so machen:

const STRUKTUR s1;

void main()
{
   int moeglichkeit1 = 0, moeglichkeit2 = 2;
   int auswahl = 0;
   switch(auswahl)
   {
      case 0:
         s1.i = &moeglichkeit1;
      break;
      default:
         s1.i = &moeglichkeit2;
      break;
   }
}

Die andere Möglichkiet wäre eine Indirektion mehr einzuführen
(und der Titel des Threads zeigt, dass du bereit bist in diese
richtung zu gehen):


typedef struct{
               int** i
              }STRUKTUR;

dann würde das klappen:

int* k;
const STRUKTUR s1 = {&k};

void main()
{
   int moeglichkeit1 = 0, moeglichkeit2 = 2;
   int auswahl = 0;
   switch(auswahl)
   {
      case 0:
         k = &moeglichkeit1;
      break;
      default:
         k = &moeglichkeit2;
      break;
   }
}

In s1 steht die Adresse des Pointers, welcher seinerseits
auf den wirklichen int zeigt.
Nur: In diesem Fall ist das mit Kanonen auf Spatzen geschossen.
Man gewinnt nichts dabei, im Gegenteil.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren