Array übergabeparameter

Gast #2144530
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?
Gast #2144674
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.
#2145921
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren