Utilisation d'un tableau global en C ++

Utilisation d'un tableau global en C ++

Une simple déclaration de tableau court qui comprend sa définition peut être déclarée dans n'importe quelle portée de C ++ comme suit:

char ch [] = 'a', 'b', 'c', 'd', 'e';

Ceci est un tableau de caractères dont le nom est ch. Le littéral du tableau est un exemple d'un initialiseur_list.

Ce même tableau peut être déclaré et initialisé comme suit, dans une portée de fonction ou une portée locale imbriquée mais pas dans la portée mondiale:

char ch [5];
ch [0] = 'a';
ch [1] = 'b';
ch [2] = 'c';
ch [3] = 'd';
ch [4] = 'e';

Si ce segment de code est tapé dans la portée globale, le compilateur publiera cinq messages d'erreur pour les cinq lignes d'attribution. Cependant, le tableau peut être déclaré sans initialisation dans la portée globale, puis les valeurs attribuées dans la portée de la fonction (ou d'autres lunettes), comme le montre le programme suivant:

#inclure
Utilisation de Namespace Std;
char ch [5];
int main()

ch [0] = 'a';
ch [1] = 'b';
ch [2] = 'c';
ch [3] = 'd';
ch [4] = 'e';
retour 0;

La portée mondiale a la déclaration «char ch [5]»;. L'attribution des valeurs a été effectuée dans la fonction c ++ main (). La fonction principale C ++ est toujours une fonction.

Ce sont les règles sur la façon d'utiliser un tableau dans la portée globale, la portée de la fonction et la portée locale imbriquée (ou toute autre portée):

1. Un tableau peut être déclaré avec l'initialisation des valeurs pratiques dans une déclaration dans n'importe quelle portée (globale, fonction, portée locale imbriquée).

2. Un tableau peut être déclaré sans initialisation des valeurs pratiques dans la portée globale et a ensuite attribué des valeurs pratiques dans la portée de la fonction ou la portée locale imbriquée.

3. Un tableau peut être déclaré sans initialisation de valeurs pratiques dans la portée de la fonction ou la portée locale imbriquée et a attribué des valeurs pratiques dans cette même portée locale.

Ces règles s'appliquent également aux types scalaires (fondamentaux). Le reste de cet article commence par illustrer la déclaration et l'attribution des valeurs pratiques des types fondamentaux dans les lunettes mondiales et autres (fonction et locale). Ceci est suivi par l'illustration de la déclaration et de l'attribution des valeurs pratiques du type de tableau dans les lunettes globales et les autres étendues (fonction et locale). L'entier (INT) est utilisé comme exemple pour les types fondamentaux. Les trois règles ci-dessus sont démontrées pour l'entier et le tableau.

Déclaration de type entier avec des lunettes mondiales et autres

Dans cette section, les règles sont démontrées avec le type entier.

Première règle:

Un entier peut être déclaré avec l'initialisation d'une valeur pratique dans une déclaration dans toute portée (globale, fonction, portée locale imbriquée). Le programme suivant l'illustre avec trois variables entières différentes:

#inclure
Utilisation de Namespace Std;
int int1 = 1;
int main()

couter<< int1 <int int2 = 2;
couter<< int2 <if (1 == 1)
int int3 = 3;
couter<< int3 <
retour 0;

La sortie est:

1
2
3

La portée locale imbriquée (bloc) est celle qui commence par la condition IF.

Deuxième règle:

Un entier peut être déclaré sans initialisation d'une valeur pratique dans la portée globale et a ensuite attribué une valeur pratique dans la portée de la fonction ou la portée locale imbriquée. Le programme suivant l'illustre avec une variable entière:

#inclure
Utilisation de Namespace Std;
int inter;
int main()

couter<< inter <inter = 20;
couter<< inter <if (1 == 1)
inter = 30;
couter<< inter <
retour 0;

La sortie est:

0
20
30

Lorsqu'un entier est déclaré sans affectation, l'entier prend la valeur par défaut de zéro. Dans ce cas, le zéro n'est pas une valeur pratique.

Troisième règle:

Un entier peut être déclaré sans initialisation d'une valeur pratique dans la portée de la fonction ou la portée locale imbriquée et a attribué des valeurs pratiques dans cette même portée locale. Le programme suivant l'illustre avec deux variables entières différentes:

#inclure
Utilisation de Namespace Std;
int main()

int int2;
int2 = 2;
couter<< int2 <if (1 == 1)
int int3;
int3 = 3;
couter<< int3 <
retour 0;

La sortie est:

2
3

Le programme suivant ne se compilera pas et le compilateur publiera un message d'erreur:

#inclure
Utilisation de Namespace Std;
int inter;
inter = 5;
int main()

couter<< inter <retour 0;

Le problème est le segment global de code de portée:

int inter;
inter = 5;

La deuxième déclaration n'est pas autorisée dans ce contexte.

Déclaration de type de tableau avec des étendues mondiales et autres

Première règle:

Un tableau peut être déclaré avec l'initialisation des valeurs pratiques dans une déclaration dans n'importe quelle portée (globale, fonction, portée locale imbriquée). Le programme suivant l'illustre avec trois tableaux différents:

#inclure
Utilisation de Namespace Std;
char ch1 [] = 'a', 'b', 'c', 'd', 'e';
int main()

couter<< ch1 <char ch2 [] = 'f', 'g', 'h', 'i', 'j';
couter<< ch2 <if (1 == 1)
char ch3 [] = 'k', 'l', 'm', 'n', 'o';
couter<< ch3 <
retour 0;

La sortie doit être:

Abcde
Fghij
Klmno

La portée locale imbriquée (bloc) est celle qui commence par la condition IF.

Deuxième règle:

Un tableau peut être déclaré sans initialisation des valeurs pratiques dans la portée globale et a ensuite attribué des valeurs pratiques dans la portée de la fonction ou la portée locale imbriquée (ou toute autre portée). Le programme suivant illustre cela avec un tableau:

#inclure
Utilisation de Namespace Std;
char ch [5];
int main()

couter<ch [0] = 'f';
ch [1] = 'g';
ch [2] = 'h';
ch [3] = 'i';
ch [4] = 'j';
couter<if (1 == 1)
ch [0] = 'k';
ch [1] = 'l';
ch [2] = 'm';
ch [3] = 'n';
ch [4] = 'o';
couter<
retour 0;

La sortie doit être:

"" "" "
Fghij
Klmno

Lorsqu'un caractère est déclaré sans affectation, le caractère prend la valeur par défaut de "(pas de caractère). Dans ce cas, le "n'est pas une valeur pratique. Il y en a cinq "pour le cas mondial.

Remarque: l'affectation ne peut être effectuée que de cette façon sans l'initizaliser_list.

Remarque: avec les tableaux, lorsque le tableau est déclaré sans initialisation de valeurs pratiques dans une fonction ou une portée imbriquée, les valeurs par défaut peuvent être arbitraires. Les valeurs par défaut ne sont que ", pour le cas global. Cette fonctionnalité arbitraire s'applique également au tableau entier.

Troisième règle:

Un tableau peut être déclaré sans initialisation de valeurs pratiques dans la portée de la fonction ou la portée locale imbriquée et a attribué des valeurs pratiques dans cette même portée locale. Le programme suivant l'illustre avec deux tableaux différents:

#inclure
Utilisation de Namespace Std;
int main()

char ch2 [5];
ch2 [0] = 'f';
ch2 [1] = 'g';
ch2 [2] = 'h';
ch2 [3] = 'i';
ch2 [4] = 'J';
couter<< ch2 <if (1 == 1)
char ch3 [5];
ch3 [0] = 'k';
ch3 [1] = 'l';
ch3 [2] = 'm';
ch3 [3] = 'n';
ch3 [4] = 'o';
couter<< ch3 <
retour 0;

La sortie doit être:

Fghij
Klmno

Le programme suivant ne se compilera pas et le compilateur publiera certains messages d'erreur:

#inclure
Utilisation de Namespace Std;
char ch1 [5];
ch1 [0] = 'a';
ch1 [1] = 'b';
CH1 [2] = 'C';
ch1 [3] = 'd';
ch1 [4] = 'e';
int main()

couter<< ch1 <retour 0;

Le problème est le segment global de code de portée:

char ch1 [5];
ch1 [0] = 'a';
ch1 [1] = 'b';
CH1 [2] = 'C';
ch1 [3] = 'd';
ch1 [4] = 'e';

Les instructions de cession ne sont pas autorisées dans ce contexte.

Conclusion

Ce sont les règles sur la façon d'utiliser un tableau dans la portée globale, la portée de la fonction et la portée locale imbriquée (ou toute autre portée):

1) Un tableau peut être déclaré avec l'initialisation des valeurs pratiques dans une déclaration, dans toute portée (globale, fonction, portée locale imbriquée).

2) Un tableau peut être déclaré sans initialisation des valeurs pratiques, dans la portée globale, puis a attribué des valeurs pratiques, dans la portée de la fonction ou la portée locale imbriquée (ou toute autre portée).

3) Un tableau peut être déclaré sans initialisation des valeurs pratiques, dans la portée de la fonction ou la portée locale imbriquée, et a attribué des valeurs pratiques, dans cette même portée locale.