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