2014-05-22 4 views
0

Ce que je veux faire est la suivante:Comment initialiser un tableau de pointeurs sur un tableau de caractères de longueur différente?

#define A 1 
#define B 2 
#define C 99 
const char row1[] = {A|B, B, A, C}; 
const char row2[] = {B, A, C}; 
... 
const char row99[] = {B, A, B ,A, A, C}; 
const char *test[]= {row1, row2, ... , row99}; 

Ma question est de savoir comment puis-je obtenir ce qui précède avec quelque chose comme ceci:

#define A 1 
#define B 2 
#define C 99 
const char *test[] = { 
    {A|B, B, A, C}, 
    {B, A, C}, 
    .... 
    {B, A, B ,A, A, C} 
} 

Je ne veux pas de longueur fixe tableau 2D comme ceci:

test[][5] = { {A|B, B, A, C}, {B, A, C}, ... 

et aussi j'ai besoin du #define et utiliser ces jetons dans l'initialisation.

très apprécié si quelqu'un peut me montrer la syntaxe correcte pour le faire. thnx.

+0

Dans quelle langue est-ce? –

Répondre

1

Je devine que cela fait référence à C. En C99, vous pouvez le faire:

char const *const test[] = { 
    (char const[]){1, 2, 3, 4}, 
    (char const[]){1, 2, 3}, 
    (char const[]){1, 2, 3, 4, 5, 6, 7} 
}; 

La syntaxe (typename[]){initializer-list} est appelé un littéral composé . Avant C99, le seul type de littéral est un littéral de chaîne, et ce que vous voulez faire n'est pas possible; vous devrez utiliser votre première méthode, ou apporter des modifications importantes à votre système de définitions.

Notez que dans ce code il n'y a aucun moyen de dire combien de temps chaque série de char est. Vous devrez ajouter une méthode pour déterminer la longueur (par exemple, une valeur sentinelle à la fin).

Questions connexes