Array übergabeparameter

Gast #2144530
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 #2144540
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
Gast #2144592
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?
Gast #2144674
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
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

Eine eigene Frage? Dieser Thread ist über 15 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.