Forum: Mikrocontroller und Digitale Elektronik Pointer auf Pointer, oder doch nicht??


von Reinhard (Gast)


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;
   }
}

von Karl heinz B. (kbucheg)


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.

von Reinhard (Gast)


Lesenswert?

Vielen Dank..
ich hab mein Problem auf das Minimum heruntergebrochen, es ist schon
ein bisserl komplexer, aber so klappt es..

thx

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.