Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

83
Vistas
Tamaño de matriz C dado por variable

Hoy encontré un código que me confundió. Hizo algo como esto:

 #include <stdio.h> int main(int argc, char **argv) { int x = 5; int foo[x]; foo[0] = 33; printf("%d\n", foo[0]); return 0; }

Mi pregunta es ¿por qué funciona esto?

La matriz foo está en la pila, entonces, ¿cómo podría expandirse por x ?

Yo hubiera esperado algo como esto:

 #include <stdio.h> int main(int argc, char **argv) { int x = 5; int foo[] = malloc(sizeof(int)*x); foo[0] = 33; printf("%d\n", foo[0]); free(foo); return 0; }

No es que sea más bonito o algo así, pero me pregunto.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

el fragmento

 int foo[x];

está hablando de la ventaja de algo llamado función VLA ( matriz de longitud variable ). Se introdujo en el estándar C99 , solo para convertirse en una función opcional en el C11 .

De esta manera, podemos crear una estructura de datos de matriz, cuya longitud se proporciona (proporciona) en tiempo de ejecución.

Tenga en cuenta que, aunque se crea en tiempo de ejecución, gcc asigna los VLA en la memoria de la pila (a diferencia de la asignación de memoria dinámica de la memoria del montón).

over 4 years ago · Santiago Trujillo Denunciar

0

La matriz foo está en la pila, entonces, ¿cómo podría expandirse por x?

gcc simplemente mueve el puntero de la pila:

 subq %rax, %rsp

Enlace al ejemplo completo con salida de ensamblado

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda