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

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.