Navigation

2.2.1 Felder

allg. Form einer Feldvereinbarung:
speicherklasse typ bezeichner [konst_ausdruck]

konst_ausdruck muss einen Integerwert ergeben.

VERBATIM/b221a: 

#define N 1000
...
float farray[10];             /* 10 Elemente vom Typ float */
char  string[100];            /* Zeichenfeld für 100 Zeichen */
long  z[N];                   /* 1000 long-Elemente */

BEISPIELE/b221a.c: 

#include <stdio.h>
#define N 10

main()
{
   int f[N], i;    /* f ist ein Feld mit 10 int-Elementen */

   i = 0;                          /* i dient als Index   */
   while(i < N)        /* f[0] bis f[9] sind Feldelemente */
      f[i++] = 0;      /* alle Feldelemente auf 0 setzen  */
   printf("i= %d\n", i);
}

BEISPIELE/b221b.c: 

#include <stdio.h>
#define YES 1
#define NO  0
#define VON   100
#define BIS   250
#define ANZ 5

main()    /* Primzahlberechnung: Sieb des Erathostenes */
{
   short prim_anz[ BIS+1 ];
   int i, j, k, n;

   printf("Berechnung der Primzahlen von %d bis %d: \n", VON, BIS);

   n=BIS; i=2;
   /* Init feld prim_anz */
   while ( i <= n )
      prim_anz[i++] = YES;
   i=2; k=1;
   while ( i <= n ) {
      if (prim_anz[i]) {
        j = i;
        if ( i >= VON )
           printf("  %6d%c", i, k++ % ANZ ? '\t' : '\n');
        while (i*i < n && ( j += i ) <= n )
           prim_anz[j] = NO;
      }
      i++;
   }
   printf("\n");
}

Beispiel:

VERBATIM/b221b: 

void strcpy(s1, s2)    /* kopiert Zeichenfeld s2 nach s1 */
char s1[], s2[];
{
     int i;

     i=0;
     while(s1[i] = s2[i]) i++;
}

C unterstützt mehrdimensionale Felder:
float a [ N ] [ N ]; /* N x N Matrix */
short b [ 2 ] [ 4 ] [ 3 ]; /* 2 x 4 x 3 Feld */
Es erfolgt eine zeilenweise Abspeicherung der Elemente (der letzte Index ändert sich am schnellsten):
b[0][0][0], b[0][0][1], b[0][0][2], b[0][1][0], ...
Navigation