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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.