Pregunta1: sí. Todas las cajas pequeñas contienen el mismo tipo de contenido. En programación decimos que todos los elementos del array contienen el mismo tipo de dato. Hay excepciones pero ahora considéralo así. Además de contener el mismo tipo de dato, todas las cajas pequeñas están relacionadas porque todas "viven" juntas.
Pregunta 2: las cajas pequeñas se crean automáticamente cuando creas una caja grande. ¿Cómo? Porque al crear una caja grande decimos cuántas cajas pequeñas contiene.
Así una instrucción como crearCajaGrande(10) supone crear una caja grande y diez pequeñas. Hemos creado en realidad 11 cosas: la caja grande y las diez pequeñas. Sin embargo todo esto se hace con una sola instrucción.
Recomendación: ver los ejemplos en C:
https://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=82&Itemid=210Cuidado: en C los índices de arrays comienzan en 0. Esto significa que int numeroAlumnos[3]; supone crear una caja grande que contiene 3 cajas pequeñas.
Para acceder a las cajas pequeñas usamos:
numeroAlumnos[0]
numeroAlumnos[1]
numeroAlumnos[2]
Fíjate que se accede con 0, 1 y 2 en lugar de con 1, 2 y 3. Eso es importante.
Saludos