Navigation

2.7.1 Initialisierung von extern bzw. static Variablen

Variablen mit arithmetischen Typen und Zeigern können explizit durch einen Konstantenausdruck initialisiert werden:

VERBATIM/b271a: 

#define MAX 512
int i       = 1;
int m       = MAX / 2;
double pi   = 3.14159;
char c      = 'a';
char space  = ' ', tab = '\t';
char f2[]   = "Programm"; /* analog f1 */
char f1[]   = {'P','r','o','g','r','a','m','m','\0'};
char *first = &buf[0];       /* first = buf */
char *last  = &buf[MAX - 1]; /* letztes Element */

Auch Teilinitialisierungen komplexer Datentypen sind möglich:

VERBATIM/b271b: 

static int feld[5]    = {0, 1, 2}; /* feld[3] = 0; */
                                   /* feld[4] = 0; */
struct datum {
    short jahr;
    char monat[4];
    short tag;
    } heute           = {1992, "Okt" ,12};

static char *keys[]   = {"if","else",...};

static int a[2][3]    = {  /* Init. "zeilenweise" */
                           { 5, 5, 5 };
                           { 4, 4, 4 };
                         }; /* ohne {} analog */

static int b[2][3]    = {
                           { 5 }; /* b[0][0] */
                           { 4 }; /* b[1][0] */
                         }; /* Rest hat Wert 0 */

BEISPIELE/b27.c: 

/*                         Initialisierung */
#include <stdio.h>
#define N 3.5

double d = N;
char buf[] = "Text zum Test ";
char *bp = buf;
int feld[5] = {1,2,3};
static char *str[] = {"eins", "zwei", "drei"};

main()
{   
    int i;

    printf("%s %f %d %s\n", bp, d, *feld, *str);
    for (i=0; i<4; i++)
       printf("%d %d %s %c\n",i,feld[i],str[i],(bp+i)[0]);
}

Navigation