Rückgabe einer Funktion

Gast #95015
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???
Gast
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
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
Gast
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;-) )
Gast
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...
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.