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
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
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.
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
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.