mikrocontroller.net

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


Autor: Reinhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
   }
}

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Reinhard (Gast)
Datum:

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

thx

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.