Moin, wie kann man globale Variablen durch Zeiger ersetzen? Ich arbeite seit einiger Zeit mit Pointern, Call by reference ist mir auch ein Begriff, zugriff auf Arrayelemente auch via pointer, etc. Doch habe ich nun ein Programm geschrieben, in dem ziemlich viele globale Variable vorkommen. Ich möchte meinen Stack einfach nicht so zuknallen. Könnte mir jemand einen Tip geben, wie man am besten an das ersetzten ran geht? Die globalen Variablen können von einigen Methoden verändert werden und da geht das kreuz & qer! Tankeschön!
Ich denke du verwechselst da etwas. Warum sollte man globale Variablen durch Pointer ersetzen wollen? Das eine hat mit dem anderen nichts zu tun.
Karl Heinz Buchegger schrieb: > Das eine hat mit dem anderen nichts zu tun. Also z.B:
1 | void foo1(void); |
2 | void foo2(short x); |
3 | //Globvar |
4 | short a=0,b=1,c=2; |
5 | |
6 | |
7 | void foo1(void) |
8 | {
|
9 | short z=0; |
10 | .do sth... |
11 | a=b*b; |
12 | z=b*c; |
13 | foo2(z); |
14 | b=b*4; |
15 | .do sth... |
16 | } |
17 | |
18 | void foo2(short x) |
19 | {
|
20 | .do sth... |
21 | c=2*x; |
22 | .do sth... |
23 | } |
Also wäre es jetzt sinnlos bei dieser Konstellation pointer einzusetzen?
Querdenker schrieb: > Also wäre es jetzt sinnlos bei dieser Konstellation pointer einzusetzen? irgenwie versteht ich was du uns bei dem Beispiel sagen willst. Sinnvoll könnte z.b. sein das foo2 c nicht direkt ändert sonder es es return zurückliefert.
Querdenker schrieb: > Also wäre es jetzt sinnlos bei dieser Konstellation pointer einzusetzen? Wie genau willst du da jetzt Pointer einsetzen? Und vor allen Dingen: Warum? Was erhoffst du dir davon?
Aaaaaalso... In den "normalen" C Büchern die ich gelesen habe steht, dass man nur soviel globale Variablen benutzen sollte, wie nötig. Also quasi sparsam mit ihnen umgehen. Nun habe ich ein Buch für die hardwarenahe Programmierung gelesen und komischerweise stand da davon nichts mehr und dann bin ich davon ausgegangen, das es wie bei der normalen C-Programmierung ist. Peter II schrieb: > Sinnvoll könnte z.b. sein das foo2 c nicht direkt ändert sonder es es > return zurückliefert. Und was wäre der Vorteil? grübel
Querdenker schrieb: > Und was wäre der Vorteil? grübel das foo2 ein wenig universellen ist und nichts von globalen variabeln wissen muss. Was ist wenn mal nicht c sonder d geändert werden soll? > In den "normalen" C Büchern die ich gelesen habe steht, dass man nur > soviel globale Variablen benutzen sollte, wie nötig. Also quasi sparsam > mit ihnen umgehen. ja weil man oft nicht mehr weiss wer wo auf die variabeln zugreift. Bei einem µC geht es aber um begrenzte resourcen, aus dem grund ist es hier sinnvoller weil es insgesammt weniger speicher braucht.
Querdenker schrieb: > Aaaaaalso... > In den "normalen" C Büchern die ich gelesen habe steht, dass man nur > soviel globale Variablen benutzen sollte, wie nötig. Also quasi sparsam > mit ihnen umgehen. Das ist auch richtig. Allerdings gelten auf einem µC durch die knappen Resourcen eigene Regeln. EIgentlich möchte man keine globalen Variablen, auf der anderen Seite hat man das Problem dass insbesondere globale Variablen es einem erlauben die zur Laufzeit notwendigen Resourcen besser einzuschätzen. > Und was wäre der Vorteil? *grübel* Du willst nach Möglichkeit globale Variablen vermeiden, weil dann Funktionen universeller benutzbar werden. Wenn es nur darum geht, eine Variable neu zu beschreiben, dann ist void foo() { c = ... irgendwas; } schlechter als int foo() { return ... irgendwas; } int main() { .... c = foo(); } weil ich dann dieselbe Funktion foo auch mit e = foo(); f = foo(); benutzen kann (wenn die Funktion etwas allgemein Sinnvolles macht, was man auch woanders brauchen kann). Genausogut kann ich auch in die Funktion hinein Werte übergeben wenn ich das will und wenn ich das Gefühl habe, dass es sich hier um eine Funktion handelt, die sinnvoll wiederverwendet werden kann. Funktionen die sich an globalen Variablen vergreifen sind immer an diese Variablen gebunden und nicht leicht auf andere Situationen anpassbar. In der normalen Programmierung ist das wesentlich häufiger der Fall als in der µC-Programmierung, sodass man hier schon auch mal zu globalen Variablen greift, wenn man das in der Desktop Programmierung nicht tun würde. Aber: Wie kommen da jetzt Pointer ins Spiel?
Karl Heinz Buchegger schrieb: > Allerdings gelten auf einem µC durch die knappen Resourcen eigene > Regeln. Das wird mir gerade auch immer klarer. Ich weis momentan auch nicht so wirklich wo das Problem liegt. Karl Heinz Buchegger schrieb: > Aber: Wie kommen da jetzt Pointer ins Spiel? Ich muss das mal noch die Nacht über wirken lassen um die Frage zu konkretisieren. Weis auch gerade nicht mehr warum ich die ersetzten wollte. Bin nun seit 16 Stunden am Programmieren. :) Besten Dank!
Querdenker schrieb: > Ich weis momentan auch nicht so wirklich wo das Problem liegt. Querdenker schrieb: > Bin nun seit 16 Stunden am Programmieren. :) Hehe! Geh ins Bett! ;)
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.