Hallo, ich habe folgendes Problem beim programmieren, Programm sieht so aus: int empfang[4], empfuhr[4]; empfang[4]=uhr(); int uhr (void) { ... empfuhr[0]=0x00; empfuhr[1]=0xf0; empfuhr[2]=0x22; empfuhr[3]=0x40; empfuhr[4]=0xff; .. return empfuhr[4]; } Mein Problem ist es, dass nicht das komplette Feld von empfuhr zurückgegeben wird, sondern nur der Inhalt von einem. wer kann mir helfen???
Hallo Andreas, Funktion Uhr einfach so umschreiben void uhr(int empfuhr[]) { empfuhr[x] = y; ... } Aufruf : int empfang[4]; uhr(empfang); Voila, die Daten sind in Empfang. Man könnte auch mit Pointern arbeiten, das wäre aber mit Spatzen auf Kanonen geschossen ;-) MfG, Khani
Falls du dich über komisches Verhalten wunderst: int empfang[4] ist falsch, es muss empfang[5] heissen.
Man sollte sich entscheiden, entweder man nimmt globale Variablen oder man gibt was zurück. Beides gleichzeitig kostet nur unnütz RAM und Flash. Will man nehrere Variablen zurückgeben, die funktional zusammenhängen, kann man das sehr gut über ein struct machen. Peter
könntet ihr Eure Erläuterungen (@peter dannegger & @Jörg Wunsch) mit einem kleinen Programmbeispiel erklären?? thx mike..
Mein Senf : @ Jörg : Das tut sie eh immer (wir wollen ja relozierbare Programme in C - festnageln tut sie in diesem Falle erst der Compiler). Ich habe nur das explizite Nennen von Pointern vermieden, um die Pferde nicht scheu zu machen ;-) Zu Peters Vorschlag : Du hast völlig Recht - das ist auf jeden Fall besserer Stil - speichermäßig aber in diesem Fall wahrscheinlich total egal. (Du hast eben immer die Königslösung;-) )
Ich denke, Jörg spielt auf die explizite Übergabe eines Pointers an die
Funktion an.
>void uhr(int empfuhr[])
Genauer: int empfuhr[] ist ein Pointer auf ein Array von int. Da Fritz
Ganter aber schrob, daß er auf Pointer verzichten möchte, stimmt diese
Aussage nicht :-)
...just my 2 cent...
Kleiner Tip aus dem Nähkästchen des Programmierers : Die Typen int a[3] sind nicht unbedingt gleich int *a = new int[3]. Insbesondere gilt, dass die Typen int a[3][3]; nicht gleich der folgenden Konvention int** a = new int* [3]; for (unsigned int it=0; it<3; it++) a[i] = new int[3]; und schon garnicht gleich int* a = new int [3 * 3]; sind. Zum Thema Pointer möchte ich folegndes sagen : Es gibt jede Menge Leute, die neutzen den lsutigen C - Stern (*) erfolgreich und nennen ihn Pointer. Das ist auch gut so. Die meisten Leute, die im Programmieren nicht so fit sind, tun sich bei der Array-Übergabe in Funktionen viel einfacher und sind erschrocken, wenn ihnen ein Pointer in Gestalt des Sterns begegnet. Ich selbst finde man muss die explizite Benutzung von Pointern nicht zwanghaft durch Sternchen schreiben durchführen, denn wofür hat man denn eine höhere Programmiersprache, wenn man sie nicht benutzen mag. In der Theorie ist jede fast jede Adressierung eine Pointer-Aktion. Die wird einem zum Glück aber maskiert. MfG, Khani
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.