Usando una matriz global en C ++

Usando una matriz global en C ++

Una simple declaración de matriz corta que incluye su definición se puede declarar en cualquier alcance en C ++ de la siguiente manera:

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

Esta es una variedad de caracteres cuyo nombre es CH. El literal de matriz es un ejemplo de un inicializador_list.

Esta misma matriz se puede declarar e inicializar de la siguiente manera, en un alcance de función o un alcance local anidado pero no en el alcance global:

char ch [5];
ch [0] = 'a';
ch [1] = 'B';
CH [2] = 'C';
ch [3] = 'd';
CH [4] = 'E';

Si este segmento de código se escribe en el alcance global, el compilador emitirá cinco mensajes de error para las cinco líneas de asignación. Sin embargo, la matriz se puede declarar sin inicialización en el alcance global y luego se asignaron valores en el alcance de la función (u otros ámbitos), como muestra el siguiente programa:

#incluir
usando el espacio de nombres STD;
char ch [5];
int main ()

ch [0] = 'a';
ch [1] = 'B';
CH [2] = 'C';
ch [3] = 'd';
CH [4] = 'E';
regresar 0;

El alcance global tiene la declaración "Char Ch [5];";. La asignación de los valores se ha realizado en la función C ++ Main (). La función principal de C ++ sigue siendo una función.

Estas son las reglas sobre cómo usar una matriz en el alcance global, el alcance de la función y el alcance local anidado (o cualquier otro alcance):

1. Se puede declarar una matriz con la inicialización de valores prácticos en una declaración en cualquier alcance (global, función, alcance local anidado).

2. Se puede declarar una matriz sin inicialización de valores prácticos en el alcance global y luego tener valores prácticos asignados en el alcance de la función o alcance local anidado.

3. Se puede declarar una matriz sin inicialización de valores prácticos en el alcance de la función o alcance local anidado y ha asignado valores prácticos en ese mismo alcance local.

Estas reglas también se aplican a los tipos escalares (fundamentales). El resto de este artículo comienza ilustrando la declaración y la asignación de valores prácticos de los tipos fundamentales en los ámbitos globales y los otros (función y local). Esto es seguido por la ilustración de la declaración y asignación de valores prácticos del tipo de matriz en los ámbitos globales y los otros (función y local). El entero (int) se usa como ejemplo para los tipos fundamentales. Las tres reglas anteriores se demuestran para el entero y la matriz.

Declaración de tipo entero con ámbitos globales y otros

En esta sección, las reglas se demuestran con el tipo de entero.

Primera regla:

Se puede declarar un entero con la inicialización de un valor práctico en una declaración en cualquier alcance (global, función, alcance local anidado). El siguiente programa ilustra esto con tres variables enteras diferentes:

#incluir
usando el espacio de nombres STD;
int int1 = 1;
int main ()

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

La salida es:

1
2
3

El alcance local anidado (bloque) es el que comienza con la condición if.

Segunda regla:

Se puede declarar un entero sin inicialización de un valor práctico en el alcance global y luego ha asignado un valor práctico en el alcance de la función o alcance local anidado. El siguiente programa ilustra esto con una variable entera:

#incluir
usando el espacio de nombres STD;
int inter;
int main ()

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

La salida es:

0
20
30

Cuando se declara un entero sin asignación, el entero toma el valor predeterminado de cero. En este caso, el cero no es un valor práctico.

Tercera regla:

Se puede declarar un entero sin inicialización de un valor práctico en el alcance de la función o el alcance local anidado y ha asignado valores prácticos en ese mismo alcance local. El siguiente programa ilustra esto con dos variables enteras diferentes:

#incluir
usando el espacio de nombres STD;
int main ()

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

La salida es:

2
3

El siguiente programa no se compilará, y el compilador emitirá un mensaje de error:

#incluir
usando el espacio de nombres STD;
int inter;
inter = 5;
int main ()

cout<< inter <regresar 0;

El problema es el segmento de código de alcance global:

int inter;
inter = 5;

La segunda declaración no está permitida en este contexto.

Declaración del tipo de matriz con ámbitos globales y otros

Primera regla:

Se puede declarar una matriz con la inicialización de valores prácticos en una declaración en cualquier alcance (global, función, alcance local anidado). El siguiente programa ilustra esto con tres matrices diferentes:

#incluir
usando el espacio de nombres 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 <
regresar 0;

La salida debe ser:

A B C D E
Fghij
Klmno

El alcance local anidado (bloque) es el que comienza con la condición if.

Segunda regla:

Se puede declarar una matriz sin inicialización de valores prácticos en el alcance global y luego tener valores prácticos asignados en el alcance de la función o alcance local anidado (o cualquier otro alcance). El siguiente programa ilustra esto con una matriz:

#incluir
usando el espacio de nombres 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<
regresar 0;

La salida debe ser:

"" "" "
Fghij
Klmno

Cuando un personaje se declara sin asignación, el personaje toma el valor predeterminado de "(sin carácter). En este caso, el "no es un valor práctico. Hay cinco "para el caso global.

Nota: La asignación solo se puede hacer de esta manera sin el inicializador_list.

Nota: Con las matrices, cuando la matriz se declara sin inicialización de valores prácticos en una función o alcance anidado, los valores predeterminados pueden ser arbitrarios. Los valores predeterminados son solo ", para el caso global. Esta característica arbitraria también se aplica a la matriz de enteros.

Tercera regla:

Se puede declarar una matriz sin inicialización de valores prácticos en el alcance de la función o alcance local anidado y ha asignado valores prácticos en ese mismo alcance local. El siguiente programa ilustra esto con dos matrices diferentes:

#incluir
usando el espacio de nombres 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 <
regresar 0;

La salida debe ser:

Fghij
Klmno

El siguiente programa no se compilará, y el compilador emitirá algunos mensajes de error:

#incluir
usando el espacio de nombres STD;
char ch1 [5];
CH1 [0] = 'A';
CH1 [1] = 'B';
CH1 [2] = 'C';
CH1 [3] = 'D';
CH1 [4] = 'E';
int main ()

cout<< ch1 <regresar 0;

El problema es el segmento de código de alcance global:

char ch1 [5];
CH1 [0] = 'A';
CH1 [1] = 'B';
CH1 [2] = 'C';
CH1 [3] = 'D';
CH1 [4] = 'E';

Las declaraciones de asignación no están permitidas en este contexto.

Conclusión

Estas son las reglas sobre cómo usar una matriz en el alcance global, el alcance de la función y el alcance local anidado (o cualquier otro alcance):

1) Se puede declarar una matriz con la inicialización de valores prácticos en una declaración, en cualquier alcance (global, función, alcance local anidado).

2) Se puede declarar una matriz sin inicialización de valores prácticos, en el alcance global, y luego tener valores prácticos asignados, en el alcance de funciones o alcance local anidado (o cualquier otro alcance).

3) Se puede declarar una matriz sin inicialización de valores prácticos, en el alcance de la función o alcance local anidado, y ha asignado valores prácticos, en ese mismo alcance local.