Zeiger auf Variable im Funktionsaufruf

Gast #713931
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
Persönliche Seite #713936
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
Persönliche Seite #713943
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.
Gast #714213
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren