Forum: Mikrocontroller und Digitale Elektronik Zeiger auf Variable im Funktionsaufruf


von Titus (Gast)


Lesenswert?

Hallo zusammen,
ich habe eine Funktion zur Berechnung einer Temperatur geschrieben. 
Diese Funktion benutze ich zur Berechnung von mehreren Temperaturen. 
Desweiteren erkennt diese Funktion Drahtbruch und liefert dies zurück. 
Um an das Messergebnis zu kommen würde ich gerne einen Zeiger auf die 
Entsprechende Variable übergeben.
In etwa so:
unsigned char TempBerechnung(signed int *Ergebnis)
{
if(blaBla)
{
Ergebnis = BlaBlub;
Rückgabe = gut;
}
else
{
Ergebnis = xxx;
Rückgabe = kaput;
}
return Rückgabe;
}
FehlerSensor = TempBerechnung(Messwert);
Wo liegt hier der Fehler mein Compiler wert sich gegen die übergabe der 
Variable.
MfG Titus

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Das sind aber Grundlagen von C zum Thema Zeiger.

In der Funktion selbst

> unsigned char TempBerechnung(signed int *Ergebnis) {
> Ergebnis = BlaBlub; // Adresse selbst verändern

*Ergebnis = 42; // Inhalt an Adresse verändern

> FehlerSensor = TempBerechnung(Messwert);

signed int Messwert = 23;
// hier ist Messwert = 23
FehlerSensor = TempBerechnung(&Messwert); // Adresse übergeben
// hier ist Messwert = 42

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

C-Code wird lesbarer, wenn man Einrückungen verwendet.

Der Fehler liegt in der Zuweisung in Deiner Funktion TempBerechnung und 
an der Art des Aufrufs
1
unsigned char TempBerechnung(signed int *Ergebnis)
2
{
3
  if(blaBla)
4
  {
5
    Ergebnis = BlaBlub; // Fehler
6
    Rückgabe = gut;
7
  }
8
  else
9
  {
10
    Ergebnis = xxx;     // Fehler
11
    Rückgabe = kaput;
12
  }
13
  return Rückgabe;
14
}
15
16
// ... anderswo ...
17
18
  int Messwert;
19
20
  FehlerSensor = TempBerechnung(Messwert);  // Fehler


Die Zuweisung erforder eine Dereferenzierung des Pointers, also:
1
    *Ergebnis = BlaBlub;

Der Aufruf erfordert die Angabe der Adresse der übergebenen Variablen:
1
  FehlerSensor = TempBerechnung(&Messwert);


Literaturempfehlung:
Kernighan & Ritchie, "Programmieren in C", zweite Auflage, 
Hanser-Verlag.

von Titus (Gast)


Lesenswert?

Besten dank!!
Entschuldigt mein Unwissen, ich bin noch jung und unschuldig in dem 
Thema Programmieren.Hoffe aber vorran zu kommen, unter anderem mit der 
Hilfe des Forums hier.
MfG Titus

von Karoly Kovacs (Gast)


Lesenswert?

@Titus: Übrigens, Deine Lösung ist nicht zu "schön".

Ich würde es "eleganter" machen:

signed int TempBerechnung(signed int Messwert) {
  if (blaBla) return(BlaBlub);
  else        return(xxx);
}

...

if (TempBerechnung(Messwert) == BlaBlub) ... // gut
else                                     ... // kaputt


Oder noch einfacher, ohne die Funktion...

Karoly

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.