Forum: Compiler & IDEs Array übergabeparameter


von Stefan (Gast)


Lesenswert?

Hallo,

ich habe ein Array mit 50 Integer-Werten.

Nun möchte ich in einer Funktion der Reihe nach diese 50 Werte ausgeben. 
Die Funktion kann aber immer nur 5 Integer-Werte auf einmal aufrufen und 
wird dann wieder verlassen und zwischenzeitlich etwas anderes 
ausgeführt.

Wie mache ich nun den Funktionsaufruf??
Brauche ich ein Array als Zwischenspeicher, da ich ja nicht bei jedem 
Aufruf die 50 Integerwerte übergeben muss oder geht das mit Zeigern?

Könnt ihr mir hier bitte ein Beispiel geben?

von Oliver (Gast)


Lesenswert?

Stefan schrieb:
> Könnt ihr mir hier bitte ein Beispiel geben?
1
void funktion(int array[]);
2
inr array[50];
3
4
void funktion(int array[])
5
{
6
   static int array_zaehler;
7
...
8
}
9
10
Aufruf:
11
funktion(array);

Alles weitere dazu steht in jedem anständigen C-Buch.

Oliver

von Stefan (Gast)


Lesenswert?

Also das geht so, weil für das Array nicht wirklich noch ein 
Speicherplatz reserviert werden muss, d.h. der Funktion nur ein Zeiger 
und nicht wirklich das Array übergeben wird?

von tom (Gast)


Lesenswert?

ja, und die variable array_zaehler hat static scope, wird zu anfang des 
programmes auf =0 gesetzt und behält ihren wert auch nach verlassen der 
funktion bei.
solltest du nach der ausgabe/bearbeitung aller 50 werte diese funktion 
weiter aufrufen, musst du einen überlauf über die array-grenze abfangen, 
z.B. :

if(array_zaehler >=50)
  array_zaehler = 0;

"C - A Software Engineering Approach" ist als Buch auch zum 
Selbststudium nur zu empfehlen, gebraucht erschwinglich auch für privat.

gruss, tom.

von Klaus W. (mfgkw)


Lesenswert?

Wenn ich die Frage richtig verstanden habe, geht es einfach darum, die 
Funktion mit der Adresse eines Teilfeldes aufzurufen.

Das könnte so aussehen:
1
#include <stdlib.h>
2
#include <stddef.h>
3
#include <stdio.h>
4
5
#define BLOCKLEN   (5)
6
#define ANZAHL    (50) // muß durh BLOCKLEN teilbar sein
7
8
int werte[ANZAHL] =
9
{
10
  100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
11
  110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
12
  120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
13
  130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
14
  140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
15
};
16
17
// gibt n Werte aus dem Feld aus
18
void gibWerteAus( const int *pWerte, size_t n )
19
{
20
  size_t   iWert;
21
  for( iWert=0; iWert<n; ++iWert )
22
  {
23
    printf( " %4d", pWerte[iWert] );
24
  }
25
  putchar( '\n' );
26
}
27
28
int main( int nargs, char **args )
29
{
30
  size_t     iBlock;
31
  int       *pTeilfeld;
32
33
  for( iBlock=0, pTeilfeld=werte;
34
       iBlock<(ANZAHL/BLOCKLEN);
35
       ++iBlock, pTeilfeld+=BLOCKLEN )
36
  {
37
    // Die Funktion wird erst mit der Adresse &werte[0] aufgerufen
38
    // und gibt die werte[0] bis werte[4] aus, dann wird sie mit
39
    // &werte[5] und gibt bis werte[9] aus, dann mit &werte[10]...
40
    gibWerteAus( pTeilfeld, BLOCKLEN );
41
42
    // hier zur Abwechslung etwas anderes machen...
43
  }
44
  return 0;
45
}

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.