Usando uma matriz global em C ++

Usando uma matriz global em C ++

Uma declaração simples de matriz curta que inclui sua definição pode ser declarada em qualquer escopo em C ++ da seguinte maneira:

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

Esta é uma variedade de personagens cujo nome é CH. A matriz literal é um exemplo de um inicializer_list.

Essa mesma matriz pode ser declarada e inicializada da seguinte maneira, em um escopo de função ou em um escopo local aninhado, mas não no escopo global:

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

Se este segmento de código for digitado no escopo global, o compilador emitirá cinco mensagens de erro para as cinco linhas de atribuição. No entanto, a matriz pode ser declarada sem inicialização no escopo global e, em seguida, os valores atribuídos no escopo da função (ou em outros escopos), como mostra o seguinte programa:

#incluir
usando namespace std;
char ch [5];
int main ()

ch [0] = 'a';
ch [1] = 'b';
ch [2] = 'c';
CH [3] = 'D';
ch [4] = 'e';
retornar 0;

O escopo global tem a declaração "CHAR CH [5];". A atribuição dos valores foi feita na função C ++ main (). A função principal C ++ ainda é uma função.

Essas são as regras sobre como usar uma matriz no escopo global, o escopo da função e o escopo local aninhado (ou qualquer outro escopo):

1. Uma matriz pode ser declarada com a inicialização de valores práticos em uma declaração em qualquer escopo (global, função, escopo local aninhado).

2. Uma matriz pode ser declarada sem inicialização de valores práticos no escopo global e depois atribuiu valores práticos no escopo da função ou escopo local aninhado.

3. Uma matriz pode ser declarada sem inicialização de valores práticos no escopo da função ou no escopo local aninhado e atribuíram valores práticos no mesmo escopo local.

Essas regras também se aplicam aos tipos escalares (fundamentais). O restante deste artigo começa ilustrando a declaração e a atribuição de valores práticos de tipos fundamentais nos escopos globais e outros (função e local). Isto é seguido pela ilustração da declaração e atribuição de valores práticos do tipo de matriz nos escopos globais e outros (função e local). O número inteiro (int) é usado como exemplo para os tipos fundamentais. As três regras acima são demonstradas para o número inteiro e a matriz.

Declaração do tipo inteiro com escopos globais e outros

Nesta seção, as regras são demonstradas com o tipo inteiro.

Primeira regra:

Um número inteiro pode ser declarado com a inicialização de um valor prático em uma declaração em qualquer escopo (global, função, escopo local aninhado). O programa a seguir ilustra isso com três variáveis ​​inteiras diferentes:

#incluir
usando namespace std;
int int1 = 1;
int main ()

cout<< int1 <int int2 = 2;
cout<< int2 <if (1 == 1)
int int3 = 3;
cout<< int3 <
retornar 0;

A saída é:

1
2
3

O escopo local aninhado (bloco) é o que está começando com a condição IF.

Segunda regra:

Um número inteiro pode ser declarado sem a inicialização de um valor prático no escopo global e depois atribuiu um valor prático no escopo da função ou no escopo local aninhado. O programa a seguir ilustra isso com uma variável inteira:

#incluir
usando namespace std;
int inter;
int main ()

cout<< inter <inter = 20;
cout<< inter <if (1 == 1)
inter = 30;
cout<< inter <
retornar 0;

A saída é:

0
20
30

Quando um número inteiro é declarado sem atribuição, o número inteiro assume o valor padrão de zero. Nesse caso, o zero não é um valor prático.

Terceira regra:

Um número inteiro pode ser declarado sem inicialização de um valor prático no escopo da função ou no escopo local aninhado e atribuiu valores práticos no mesmo escopo local. O programa a seguir ilustra isso com duas variáveis ​​inteiras diferentes:

#incluir
usando namespace std;
int main ()

int int2;
int2 = 2;
cout<< int2 <if (1 == 1)
int int3;
int3 = 3;
cout<< int3 <
retornar 0;

A saída é:

2
3

O programa a seguir não será compilação e o compilador emitirá uma mensagem de erro:

#incluir
usando namespace std;
int inter;
inter = 5;
int main ()

cout<< inter <retornar 0;

O problema é o segmento de código de escopo global:

int inter;
inter = 5;

A segunda declaração não é permitida neste contexto.

Declaração do tipo de matriz com escopos globais e outros

Primeira regra:

Uma matriz pode ser declarada com a inicialização de valores práticos em uma declaração em qualquer escopo (global, função, escopo local aninhado). O programa a seguir ilustra isso com três matrizes diferentes:

#incluir
usando namespace std;
char ch1 [] = 'a', 'b', 'c', 'd', 'e';
int main ()

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

A saída deve ser:

ABCDE
Fghij
Klmno

O escopo local aninhado (bloco) é o que está começando com a condição IF.

Segunda regra:

Uma matriz pode ser declarada sem inicialização de valores práticos no escopo global e depois atribuiu valores práticos no escopo da função ou no escopo local aninhado (ou qualquer outro escopo). O programa a seguir ilustra isso com uma matriz:

#incluir
usando namespace std;
char ch [5];
int main ()

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

A saída deve ser:

"" "" "
Fghij
Klmno

Quando um personagem é declarado sem atribuição, o personagem assume o valor padrão de "(sem caracteres). Nesse caso, o "não é um valor prático. Existem cinco "para o caso global.

Nota: A tarefa só pode ser feita dessa maneira sem o Initializer_list.

Nota: Com as matrizes, quando a matriz é declarada sem inicialização de valores práticos em uma função ou escopo aninhado, os valores padrão podem ser arbitrários. Os valores padrão são apenas ", para o caso global. Este recurso arbitrário também se aplica à matriz inteira.

Terceira regra:

Uma matriz pode ser declarada sem inicialização de valores práticos no escopo da função ou no escopo local aninhado e atribuíram valores práticos no mesmo escopo local. O programa a seguir ilustra isso com duas matrizes diferentes:

#incluir
usando namespace std;
int main ()

CHAR CH2 [5];
ch2 [0] = 'f';
ch2 [1] = 'g';
CH2 [2] = 'H';
ch2 [3] = 'i';
CH2 [4] = 'J';
cout<< ch2 <if (1 == 1)
CHAR CH3 [5];
CH3 [0] = 'K';
CH3 [1] = 'L';
CH3 [2] = 'M';
CH3 [3] = 'n';
CH3 [4] = 'O';
cout<< ch3 <
retornar 0;

A saída deve ser:

Fghij
Klmno

O programa a seguir não será compilação e o compilador emitirá algumas mensagens de erro:

#incluir
usando namespace std;
CHAR CH1 [5];
CH1 [0] = 'A';
CH1 [1] = 'B';
CH1 [2] = 'C';
CH1 [3] = 'D';
CH1 [4] = 'e';
int main ()

cout<< ch1 <retornar 0;

O problema é o segmento de código de escopo global:

CHAR CH1 [5];
CH1 [0] = 'A';
CH1 [1] = 'B';
CH1 [2] = 'C';
CH1 [3] = 'D';
CH1 [4] = 'e';

As declarações de atribuição não são permitidas neste contexto.

Conclusão

Essas são as regras sobre como usar uma matriz no escopo global, o escopo da função e o escopo local aninhado (ou qualquer outro escopo):

1) Uma matriz pode ser declarada com a inicialização dos valores práticos em uma afirmação, em qualquer escopo (global, função, escopo local aninhado).

2) Uma matriz pode ser declarada sem inicialização de valores práticos, no escopo global, e depois atribuiu valores práticos, no escopo da função ou no escopo local aninhado (ou em qualquer outro escopo).

3) Uma matriz pode ser declarada sem inicialização de valores práticos, no escopo da função ou no escopo local aninhado, e atribuíram valores práticos, nesse mesmo escopo local.