[C con Clase] Duda sobre indices de arrays.

Davidson, Steven srd4121 en njit.edu
Jue Abr 24 08:32:16 CEST 2014


Hola Gabriel,

2014-04-24 1:44 GMT-04:00 Gabriel Savoy <gabriel_savoy en hotmail.com>:

> Hola. Quiero primero agradecer por el curso, estoy aprendiendo mucho de el.
>
>
Muchas gracias. Nos entusiasma saber que nuestra página te sea de utilidad.

Tengo una duda que no sabia como hacerselas llegar ya que supuestamente no
> se puede usar comentarios en la pagina para preguntar, a pesar de que veo
> que mucha gente lo hace, por lo que decidi mandarles este mensaje.
>
>
Muchas gracias de nuevo por seguir nuestra petición. La ventaja de la lista
de correo-e es que tu mensaje llegará a todos los miembros y te podremos
ayudar directamente. Si dejas un comentario en la página, es posible que
sólo unas cuantas personas lo vean; y menos te contestarán.

A la hora de definir un array el indice tengo entendido que debe ser
> siempre una constante. La cuestion es que cuando yo pongo de indice de mi
> array una variable , definida previamente, mi codigo tambien se puede
> compilar. Porque?. Y ademas cuando lo hago de esta forma no puedo
> inicializar el array, tengo que definir sus valores en las sentencias
> siguientes. Sizeof revela que usando ambos metodos los dos arrays son
> exactamente del mismo tamaño.
>
>
En primer lugar, hay que tener mucho cuidado con la terminología. Cuando
dices "índice", realmente deberías decir "tamaño" o "cantidad" de elementos
del array. Es decir, durante la declaración y definición de un array,
indicamos la cantidad (máxima) de elementos a crear del tipo de dato
indicado. Usando la nomenclatura para la sintaxis tenemos,

<tipo> <nombre> [ <cantidad> ];

Si existe una inicialización, entonces la sintaxis viene a ser,

<tipo> <nombre> [ <cantidad> ] = <inicialización_de_array>;

donde <cantidad> es opcional, indicando un cálculo por parte del compilador
basado en los datos de la inicialización.

Ahora bien, a la hora de manejar los elementos del array, usamos su nombre,
los corchetes, y un índice; por ejemplo,

int aEnteros[] = { 1, 2, 3, 4 };

aEnteros[0] = -1;

Una cosa es la definición de un array y otra cosa es su uso. Entiendo que
el hecho de que se usen los corchetes en ambos casos pueda provocar alguna
confusión. Repito que durante la definición, los corchetes indican que
definimos un array de la cantidad indicada, mientras que posteriores
apariciones de los corchetes indican un uso de acceso a un elemento del
array mediante un índice.

En cuanto al hecho de que algunos compiladores acepten una variable durante
la definición de un array, esto no es un comportamiento estándar. El
compilador que usas puede funcionar como crees, pero otros compiladores no
tienen por qué comportarse así. Otros ignoran el supuesto contenido de la
variable creando un array de 1 elemento. Los compiladores que sigan el
estándar deberían darte un mensaje de error hasta que corrijas esta parte
del código fuente.

Mi consejo es que no te fíes de estos compiladores que no sigan el estándar
del lenguaje. Por supuesto, deberías conocer la gramática para escribir
código correctamente, tanto si el compilador sigue el estándar como si lo
"extiende".

Por ultimo hay un ejemplo en el capitulo punteros 2, que usa new para
> definir un array y usa para el indice de este una variable, cuando en
> teoria esto no se deberia hacer.
>
>
Nuevamente, aquí tenemos la confusión de la terminología: cantidad durante
la definición e índice durante su uso - acceso a un elemento. Supongo que
te refieres a algo así:

int nCant = 10;
int *ptr = new int[nCant];

Aquí, 'ptr' es un puntero y no un array. Además. estamos usando el
operador, 'new[]', que adjudica un bloque de memoria dinámicamente.

El término "dinámico" se refiere a una operación (o decisión) durante la
ejecución del programa; y por tanto, ya no hay compilador que valga llegado
a este punto. El término "estático" se suele referir a las operaciones
durante la compilación del programa.

Un array se define estáticamente, y por tanto el compilador DEBE conocer su
tamaño para poder gestionar correctamente la creación de tal array
(estático). Un array dinámico se crea - y se destruye - durante la
ejecución del programa, por lo que el compilador no actúa una vez que
finalice la compilación. Esto implica que el propio programa gestionará el
array dinámico; y por tanto, el programador tiene mayor control sobre tal
gestión del array dinámico.

Saludos. Una ultima cosa, esto quizas un poco fuera de lugar, en esta
> pagina de listas de c con clase el historico muestra que han bajado
> muchisimos los numeros de mensajes en los ultimos años, saben porque?
> pregunto solo por curiosidad, es que c++ ha perdido vigencia?.
>
>
La verdad es que ya nos lo preguntábamos en su momento. Creemos que se debe
a que las universidades han cambiado su currículo y en lugar de comenzar el
aprendizaje por C++ optaron por usar Java.

C++ sigue vigente, pero obviamente al aparecer nuevos lenguajes de
programación, parece que son más importantes y populares por la novedad, lo
cual puede implicar que destronen a C++. Java, C#, PHP, y otros lenguajes
tienen sus nichos y se usan para solucionar ciertos tipos de problemas.
Esto no significa que C++ no se use o que ya no sea útil aprenderlo. De
hecho, estos otros tres lenguajes que he mencionado se basan en C++ y en C,
por lo que sabiendo C++ te ayuda enormemente si quieres extender tus
conocimientos a otros lenguajes.

Por último, aprobaron un nuevo estándar de C++ hace varios años que indica
que C++ no está "muerto", agregando varias características interesantes al
lenguaje.

Bueno ahora si perdon por escribir tanto. Les agradezco mucho el trabajo
> que hicieron con la pagina. Saludos. Gabriel.
>
>
No pasa nada si tienes que escribir mucho, con tal de que todo sea útil
para describir el problema que tienes.


Espero que todo esto aclare las dudas.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140424/cc49c674/attachment.html>


Más información sobre la lista de distribución Cconclase