www.mikrocontroller.net

Forum: Compiler & IDEs Struct zeiger an funktion übergeben und später auswerten.


Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus, habe problem mit Zeiger Übergabe. Wenn ich in Avr Studio 
simuliere
wird der out_sensor in giveSensorConfigTest richtig gesetzt. Aber in 
main verliere ich wieder die Adresse.
typedef struct
{
    uint8_t is_changed;
} ConfigSensor;

volatile ConfigSensor AllSensorsConig[3];

uint8_t giveSensorConfigTest(uint8_t index, ConfigSensor *out_sensor)
{
  out_sensor = &AllSensorsConig[index];
}

main()
{
ConfigSensor *sens;
giveSensorConfigTest(2,*sens);
(*sens).is_changed = 0;
}

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe jetzt nicht getestet aber so müsst es gehen. du braucht ein Zeiger 
auf ein Zeiger.
typedef struct
{
    uint8_t is_changed;
} ConfigSensor;

volatile ConfigSensor AllSensorsConig[3];

uint8_t giveSensorConfigTest(uint8_t index, ConfigSensor **out_sensor)
{
  *out_sensor = &AllSensorsConig[index];
}

main()
{
ConfigSensor *sens;
giveSensorConfigTest(2,*sens);
(*sens).is_changed = 0;
}

Autor: Hrm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeiger auf Zeiger ist richtig, aber der Quelltext muss dann so lauten:
typedef struct
{
    uint8_t is_changed;
} ConfigSensor;

volatile ConfigSensor AllSensorsConig[3];

uint8_t giveSensorConfigTest(uint8_t index, ConfigSensor **out_sensor)
{
  *out_sensor = &AllSensorsConig[index];
}

main()
{
ConfigSensor *sens;
giveSensorConfigTest(2, &sens);
(*sens).is_changed = 0;
}

Also Adressoperator & in Aufruf von giveSensor....

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe in Avr Studio simuliert, klappt nicht:( Hilfe!!!

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jap das geht. Ich werde versuchen es erstmal selber zu verstehen wenns 
net klappt melde ich mich wieder.

Big big thx

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verstehe nicht warum ich ein Zeiger auf einen Zeiger übergeben muss.
Ich übergebe doch ein Zeiger der soll doch einfach auf die Adresse  des 
Elements zeige.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du will mit der funktion ein zeiger auf eine Stucktur zurückbekommen. 
Wenn man etwas zurückbekommen will muss man es als Zeiger übergeben. 
Schlussfolgerung Zeiger auf Zeiger.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> (*sens).is_changed = 0;

Das könnte man auch einfacher schreiben:

sens->is_changed = 0;

> uint8_t giveSensorConfigTest(uint8_t index, ConfigSensor
> *out_sensor)
> {
>  out_sensor = &AllSensorsConig[index];
> }

out_sensor ist ein Parameter. Die sind in C im Prinzip lokale Variablen, 
die halt von außen initialisiert werden. out_sensor ist also eine lokale 
Kopie des an die Funktion übergebenen Zeigers. Nach Beenden der Funktion 
ist out_sensor weg und damit ist deine Zuweisung wirkungslos. Wenn deine 
Funktion etwas per Parameter übergebenes ändern soll, mußt du einen 
Zeiger darauf übergeben. in giveSensorConfigTest willst du aber nicht 
ein Objekt vom Typ ConfigSensor ändern, sondern eins vom Typ 'Zeiger auf 
ConfigSensor', also mußt du einen Zeiger auf 'Zeiger auf ConfigSensor' 
übergeben.

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank Leute. Jetzt sind auch die Kopfschmerzen vorerst weg:)

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.