Forum: Compiler & IDEs verschiedene übergabewerte in for schleife benutzen


von andy (Gast)


Lesenswert?

Hallo,ich übergebe einer Funktion 8 Werte.
In der Funktion ist nur eine for Schleife,die in ein array schreibt.
Wie kann ich es bewerkstelligen das in jedem durchlauf der for schleife 
der nächste ubergebene wert benutzt wird?

void test (uint8_t a,uint8_t b, usw.bis uint8_t h)
 {
  for(uint8_z = 0;z<7;z++)
   {
    anzeige [0] [a] = 128;
   }
 }
Die Schleife soll also im ersten durchlauf den Wert von a,im zweiten den 
Wert von b benutzen.
Ich hoffe,ich habe mich verständlich ausgedrückt.
Wäre nett,wenn mir jemand helfen könnte.

gruss

andy

von Fabian V. (fabian29)


Lesenswert?

Übergib nur einen Zeiger auf ein Feld und lass den hochzählen, dann 
einfach auf den Inhalt zugreifen

uint8_t feld[8];

void test (uint8_t *zeiger)
{
  for(uint8_z = 0;z<8;z++)
   {
     anzeige [0][*zeiger];
     zeiger++;
   }
}

von Fabian V. (fabian29)


Lesenswert?

Sorry Schnellschuss, besser so:

uint8_t feld[8];
void main()
{
 test (feld);
}

void test (uint8_t *zeiger)
{
  for(uint8_z = 0;z<8;z++)
   {
     anzeige [0][z] = *zeiger;
     zeiger++;
   }
}

von andy (Gast)


Lesenswert?

Hallo,danke für die antwort.da sich die 8 werte ständig ändern,müsste 
ich sie ja jedesmal erst in test schreiben und die funktion schreibt sie 
dann in anzeige.Dann kann ich sie ja sofort in anzeige schreiben.Da ich 
das sehr oft ausführen muss,dachte ich mir ich übergebe die 8 werte an 
die funktion und sie schreibt die werte in das array.

gruss
andy

von Fabian V. (fabian29)


Lesenswert?

Wir rufst du denn die Funktion auf und wo ändern sich die Werte? Gib mal 
bissel mehr Code!

von andy (Gast)


Lesenswert?

Hallo der zuschreibende wert ist immer der gleiche (128) nur die Stelle 
in dem zweidimensionalem Array ist unterschiedlich.

gruss

andy

von Fabian V. (fabian29)


Lesenswert?

Dann würde ich das glaub ich eher so aufrufen:

uint8_t feld[2];

void main()
{
 feld[0] = blablabla; position im array definieren
 feld[1] = blablabla;
 schreiben(feld);
}

void schreiben(uint8_t *zeiger)
{
 anzeige[zeiger][zeiger++] = 128;
}

von Klaus W. (mfgkw)


Lesenswert?

oder über eine variable Argumentliste; sie muß ja nicht wirklich 
variabel sein.

von Rolf Magnus (Gast)


Lesenswert?

andy schrieb:
> Hallo,danke für die antwort.da sich die 8 werte ständig ändern,müsste
> ich sie ja jedesmal erst in test schreiben und die funktion schreibt sie
> dann in anzeige.

Bei deiner Lösung schreibst du sie halt in die 8 Parameter der Funktion. 
Einige davon werden allerdings wahrscheinlich in Registern übergeben, 
was es ein paar Taktzyklen schneller machen dürfte.

> Dann kann ich sie ja sofort in anzeige schreiben.Da ich das sehr oft
> ausführen muss,dachte ich mir ich übergebe die 8 werte an die funktion
> und sie schreibt die werte in das array.

Nun, wie du dir das vorstellst, geht es nicht. Die einzige Alternative 
wäre dann die von Klaus erwähnte variable Argumentliste, aber die wird 
meines Wissens normalerweise komplett über den Stack übergeben, geht 
also auch über den Speicher. Damit gewinnst du also nichts.

von Fabian V. (fabian29)


Lesenswert?

Ich bin mir jetzt ned ganz sicher ohne es auszuprobieren, kann man in C 
Funktionen überladen?

von Klaus W. (mfgkw)


Lesenswert?

nein, erst in C++

von DirkB (Gast)


Lesenswert?

Fabian V. schrieb:
> kann man in C
> Funktionen überladen?

Das überladen läuft aber auch auf mehrere Funktionen raus.
In C musst du die selber verwalten, in C++ macht das der Compiler.

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
Noch kein Account? Hier anmelden.