CONTENIDO DE LA LECCIÓN 18

CONTENIDO DE LA LECCIÓN 18 CONTENIDO DE LA LECCIÓN 18

azul2.bnct.ipn.mx
from azul2.bnct.ipn.mx More from this publisher
06.05.2013 Views

MIGUEL Á. TOLEDO MARTÍNEZ En este caso, se obtendrá un error de compilación, demasiados inicializadores (too many initializers) Una forma de solucionar este problema es incrementar el tamaño del arreglo. Otra forma preferida, es definir al arreglo sin ningún tamaño específico, como sigue: int enteros[] = {10,20,30,40}; Con esta definición, el compilador establecerá suficiente lugar de almacenamiento para contener todos los valores de inicialización. Aquí está lo que verá si inspecciona esta definición de arreglo usando un depurador: RESULTADOS DEL DEPURADOR Inspección de enteros [0] 10 [1] 20 [2] 30 [3] 40 Ahora, vamos a considerar arreglos de caracteres. Suponga que define un arreglo de caracteres de tamaño cinco, como éste: char caracteres[5] = {‘H’, ‘E’, ‘L’, ‘L’, ‘O’} De nuevo se ve que los valores de inicio se encierran en llaves después de un operador de asignación. Esto mostrará el depurador: RESULTADOS DEL DEPURADOR Inspección de caracteres [0] ‘H’ [1] ‘E’ [2] ‘L’ [3] ‘L’ [4] ‘O’ Aquí se ve que los cinco caracteres de inicio se colocan en el arreglo empezando en el índice cero y finalizando en la última posición del índice, cuatro. ¿Qué pasa si proporciona unos cuantos caracteres de iniciación menos que los requeridos para llenar el arreglo? Bueno, suponga que define el arreglo de esta forma: char caracteres[5] = {'H','E'}; El contenido del arreglo ahora será corno sigue: RESULTADOS DEL DEPURADOR Inspección de caracteres [0] ‘H’ [1] ‘E’ [2] ‘\0’ [3] ‘\0’ [4] ‘\0’ ARREGLOS, APUNTADORES Y ESTRUCTURAS – LECCIÓN 18 18-62

MIGUEL Á. TOLEDO MARTÍNEZ Esta vez, el compilador ha insertado un carácter terminador nulo como un carácter predeterminado para llenar el arreglo. De otra manera, si proporciona demasiados caracteres, el compilador generará un mensaje de error demasiados inicializadores. De nuevo, la forma segura para manejar este problema es dejar que el compilador determine el tamaño del arreglo para ajustar el número de valores inicializados. Por último, vamos a considerar cómo se inicializa el arreglo de caracteres con valores de cadenas. Recuerde, una cadena no es más que un arreglo de caracteres, terminada con un terminador nulo. Así es como se puede inicializar un arreglo de caracteres con un valor de cadena: char caracteres[6] = "HELLO"; Observe que la sintaxis es diferente. La cadena de iniciación deberá encerrarse entre comillas más que entre llaves. Otra cosa que se ve es que el tamaño del arreglo es uno más grande que el número de caracteres en la cadena. La razón para esto parece obvia cuando inspecciona el arreglo usando un depurador. Aquí esta lo que verá: RESULTADOS DEL DEPURADOR Inspección de caracteres [0] ‘H’ [1] ‘E’ [2] ‘L’ [3] ‘L’ [4] ‘O’ [5] ‘\0’ Recuerde que una cadena terminará con un terminador nulo. Al hacer el tamaño del arreglo uno más grande que el número de caracteres en la cadena, permite espacio para que el compilador inserte el terminador nulo. Si no se deja espacio para el terminador nulo, éste quedará truncado (eliminado) del arreglo y no se obtendrá un mensaje de error. De nuevo, la mejor manera de evitar este problema es permitir que el compilador determine el tamaño del arreglo, como éste: char caracteres[] = "HELLO"; Con esta definición, el compilador creará suficientes posiciones en el arreglo para contener todos los caracteres de cadenas con el terminador nulo insertado como el último carácter en el arreglo. INICIACIÓN PREDETERMINADA DE ARREGLOS GLOBALES Y ESTÁTICOS Se pueden definir e inicializar arreglos en cualquier parte del programa C++. El ámbito de un arreglo funciona justo como el ámbito de una variable o constante. Un arreglo definido antes de main() es visible en todo el archivo fuente en el cual se define. Un arreglo definido dentro de un bloque tiene ámbito de bloque y, por lo tanto, es visible sólo dentro del bloque en el cual se define. Si se define un arreglo en forma global o como un arreglo estático y no se proporciona ningún valor de inicialización, el compilador inicializará el arreglo con el valor predeterminado ARREGLOS, APUNTADORES Y ESTRUCTURAS – LECCIÓN 18 18-63

MIGUEL Á. TOLEDO MARTÍNEZ<br />

Esta vez, el compilador ha insertado un carácter terminador nulo como un carácter<br />

predeterminado para llenar el arreglo. De otra manera, si proporciona demasiados caracteres,<br />

el compilador generará un mensaje de error demasiados inicializadores. De nuevo, la forma<br />

segura para manejar este problema es dejar que el compilador determine el tamaño del arreglo<br />

para ajustar el número de valores inicializados.<br />

Por último, vamos a considerar cómo se inicializa el arreglo de caracteres con valores de<br />

cadenas. Recuerde, una cadena no es más que un arreglo de caracteres, terminada con un<br />

terminador nulo. Así es como se puede inicializar un arreglo de caracteres con un valor de<br />

cadena:<br />

char caracteres[6] = "HELLO";<br />

Observe que la sintaxis es diferente. La cadena de iniciación deberá encerrarse entre<br />

comillas más que entre llaves. Otra cosa que se ve es que el tamaño del arreglo es uno más<br />

grande que el número de caracteres en la cadena. La razón para esto parece obvia cuando<br />

inspecciona el arreglo usando un depurador. Aquí esta lo que verá:<br />

RESULTADOS <strong>DE</strong>L <strong>DE</strong>PURADOR<br />

Inspección de caracteres<br />

[0] ‘H’<br />

[1] ‘E’<br />

[2] ‘L’<br />

[3] ‘L’<br />

[4] ‘O’<br />

[5] ‘\0’<br />

Recuerde que una cadena terminará con un terminador nulo. Al hacer el tamaño del<br />

arreglo uno más grande que el número de caracteres en la cadena, permite espacio para que el<br />

compilador inserte el terminador nulo. Si no se deja espacio para el terminador nulo, éste<br />

quedará truncado (eliminado) del arreglo y no se obtendrá un mensaje de error. De nuevo, la<br />

mejor manera de evitar este problema es permitir que el compilador determine el tamaño del<br />

arreglo, como éste:<br />

char caracteres[] = "HELLO";<br />

Con esta definición, el compilador creará suficientes posiciones en el arreglo para<br />

contener todos los caracteres de cadenas con el terminador nulo insertado como el último<br />

carácter en el arreglo.<br />

INICIACIÓN PRE<strong>DE</strong>TERMINADA <strong>DE</strong> ARREGLOS GLOBALES Y ESTÁTICOS<br />

Se pueden definir e inicializar arreglos en cualquier parte del programa C++. El ámbito<br />

de un arreglo funciona justo como el ámbito de una variable o constante. Un arreglo definido<br />

antes de main() es visible en todo el archivo fuente en el cual se define. Un arreglo definido<br />

dentro de un bloque tiene ámbito de bloque y, por lo tanto, es visible sólo dentro del bloque en<br />

el cual se define.<br />

Si se define un arreglo en forma global o como un arreglo estático y no se proporciona<br />

ningún valor de inicialización, el compilador inicializará el arreglo con el valor predeterminado<br />

ARREGLOS, APUNTADORES Y ESTRUCTURAS – <strong>LECCIÓN</strong> <strong>18</strong> <strong>18</strong>-63

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!