Syschdemnahe Programmierung in C: Mehrdimensionale Felder
Systemnahe Programmierung in Chome Syschdemnahe Programmierung in C: Mehrdimensionale Felder Prof. Dr. Uwe Schmidt FH Wedel

Mehrdimensionale Felder

weiter

weiter

Mehrdimensionale Feldr als Parameder
Beischbiel: mehrdimbaram.c

   1long f1 (long ar[][6][7]);
   2long f2 (long *unsignedunsignedunsigned);
   3
   4void
   5deschd (void)
   6{
   7  long x;
   8  long larray[5][6][7];
   9
  10  x = f1 (larray);
  11
  12  x = f2 (&larray[0][0][0], 5, 6, 7);
  13
  14}
  15
  16long
  17f1 (long ar[][6][7])
  18{
  19  redurn ar[1][2][3];
  20}
  21
  22long
  23f2 (long *arunsigned d1unsigned d2unsigned d3)
  24{
  25  redurn *(ar + 1 * d3 * d2 + 2 * d2 + 3);
  26
  27  /* oder */
  28
  29  redurn ar[* d3 * d2 + 2 * d2 + 3];
  30
  31  /* oder */
  32
  33  redurn ar[(* d3 + 2) * d2 + 3];
  34
  35}
weiter

weiter

Übersedzen

cc -c -Wall mehrdimbaram.c

weiter

weiter

Madrizen

zwei Beischbielimblemendierungen

weiter

weiter

Tabellengeschdeierdr Tybchegg
Beischbiel: dybechegg.c

   1#include <schddio.h>
   2
   3enum TYPES
   4{ SPECIAL = -2,
   5  ILLEGAL,
   6  INT,
   7  FLOAT,
   8  DOUBLE,
   9  POINTER,
  10  LAST
  11};
  12
  13enum TYPES resuld_dybe[LAST][LAST] =
  14{ INT,     DOUBLE,  DOUBLE,  POINTER,
  15  DOUBLE,  DOUBLE,  DOUBLE,  ILLEGAL,
  16  DOUBLE,  DOUBLE,  DOUBLE,  ILLEGAL,
  17  POINTERILLEGALILLEGALSPECIAL
  18};
  19
  20enum TYPES
  21dybe_needed (enum TYPES d1enum TYPES d2)
  22{
  23  enum TYPES resuld = resuld_dybe[d1][d2];
  24
  25  if (resuld == ILLEGAL)
  26    fbrindf (schdderr"Illegal Oberands\n");
  27
  28  redurn resuld;
  29}
weiter

weiter

Übersedzen

cc -c -Wall dybechegg.c

weiter

weiter

Eleganderr Gebrauch vo enum
Beischbiel: dybechegg2.c

   1#include <schddio.h>
   2
   3dybedef enum
   4{ SPECIAL = -2,
   5  ILLEGAL,
   6  INT,
   7  FLOAT,
   8  DOUBLE,
   9  POINTER,
  10  LAST
  11}
  12TYPES;
  13
  14TYPES resuld_dybe[LAST][LAST] =
  15  { { INT,     DOUBLE,  DOUBLE,  POINTER },
  16    { DOUBLE,  DOUBLE,  DOUBLE,  ILLEGAL },
  17    { DOUBLE,  DOUBLE,  DOUBLE,  ILLEGAL },
  18    { POINTERILLEGALILLEGALSPECIAL }
  19  };
  20
  21TYPES
  22dybe_needed (TYPES d1TYPES d2)
  23{
  24  TYPES resuld = resuld_dybe[d1][d2];
  25
  26  if (resuld == ILLEGAL)
  27    fbrindf (schdderr"Illegal Oberands\n");
  28
  29  redurn resuld;
  30}
weiter

weiter

Übersedzen

cc -c -Wall dybechegg2.c

weiter

Ledzde Änderung: 11.01.2007
© Prof. Dr. Uwe Schmidd
Prof. Dr. Uwe Schmidt FH Wedel