2010-12-13 30 views
0

je trouve la déclaration suivante dans mon c Livre, quelqu'un peut-il expliquer:2d tableau de pointeurs de caractères

char *dic[][40]={ 
"atlas", "A volume of maps", 
"car", "a vehicle", 
"telephone", "a communication device", 
"", "" 
    } 

Voici ce que fait le 40 moyens à savoir quelle dimension c'est?

Répondre

1

dic est un tableau bidimensionnel de char*; ses dimensions sont 1 x 40.

Le 40 est donné dans le déclarateur et le 1 est impliqué par le fait qu'il n'y a qu'un seul tableau dans l'initialiseur. L'initialisation complète aurait un autre ensemble d'entretoises, par exemple,

char *dic[][40] = 
{ 
    { 
     "atlas",  "A volume of maps", 
     "car",  "a vehicle", 
     "telephone", "a communication device", 
     "",   "" 
    } 
}; 

Avec les entretoises supplémentaires, il est clair que la dimension implicite est 1.

Chaque élément de la matrice à deux dimensions est un pointeur de tapez char*. Les huit premiers pointeurs sont initialisés pour pointer vers les huit littéraux de chaîne donnés dans l'initialiseur.

+0

ok merci james – codeomnitrix

+0

Si les dimensions sont 1x40, pourquoi ne pas avoir un tableau unidimensionnel? – Itsik

+0

@Itsik: Je ne sais pas. Vous devrez demander @codeomnitrix. –

3

C'est en quelque sorte une façon bizarre d'initialiser le dictionnaire.

Il s'agit d'un tableau 2D de char* (chaînes à terminaison nulle (\0)).

Les dimensions sont [lignes] [colonnes].

Vous avez donc 1 rang (déterminé par le initialiseur) et 40 colonnes de chaînes,

où 8 d'entre eux sont initialisés.

REMARQUE: Êtes-vous sûr que ce n'est pas char dic[][40] (c'est-à-dire, une liste de chaînes de longueur maximale 40)?

+0

ok merci itsik. – codeomnitrix

0

Je pense qu'il peut y avoir une erreur dans le livre, il semble qu'ils voulaient le dictionnaire - tableau 3D:


char *dic[][40]={ 
      {"atlas", "A volume of maps"}, 
      {"car", "a vehicle"}, 
      {"telephone", "a communication device"}, 
      {"", ""} 
     }; 
0

Le 40 dans votre code signifie que la longueur maximale de caractères (ou la longueur totale de la chaîne) est 40.

Pensez char *dic[][40] comme un tableau de pointeurs. Où un pointeur pointe vers un maximum de 40 caractères.

+0

ce serait correct si c'est 'char dic [] [40]', c'est en fait une liste de 40 chaînes. – Itsik