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

244
Vistas
¿Cuál es la expresión de asignación entre paréntesis de matriz en C?

En C89 A.1.2.2 Declaraciones

declarador-directo [expresión-constante]

En C99 A.2.2 Declaraciones

declarador-directo [tipo-calificador-lista_opt asignación-expresión_opt]

Entiendo assignment-expression_opt como var = 1; . Pero las matrices no se declaran como int arr[i = 0]; . ¿Por qué C99 usa el término "expresión de asignación" en lugar de "expresión constante" y qué significa?

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

0

En C89 no había soporte para matrices de longitud variable. Esto significa que los tamaños de las matrices deben fijarse en el momento de la compilación.

A partir de C99, las declaraciones y sentencias se pueden mezclar dentro de un bloque, por lo que ahora se permiten como inicializador expresiones completas que deben ejecutarse. Esto también es lo que permite crear matrices de longitud variable.

Así que una declaración como int arr[i=0]; es una sintaxis válida, aunque no es válida porque creó una matriz de tamaño 0. int arr[i=2]; es válido y creará arr como una matriz de int de tamaño 2, y establece i en 2.

over 4 years ago · Santiago Trujillo Denunciar

0

Esto se debe a que C99 es compatible con VLA y lo que sea que esté entre [] puede ser prácticamente cualquier expresión.

En cuanto a por qué dice expresión de asignación específicamente:

La forma en que se describe la sintaxis de las expresiones y la precedencia de operadores en C es haciendo que la sintaxis de cada grupo de operadores apunte al grupo de operadores con mayor precedencia que él mismo. Por ejemplo, observe la sintaxis de una expresión de asignación:

expresión-asignación:
expresión condicional

Apunta al operador condicional ?: que será el siguiente grupo de operadores con mayor precedencia que los operadores de asignación.

Y para el operador de coma con menor precedencia de todos, la sintaxis es en realidad:

expresión:
expresión-asignación
expresión , asignación-expresión

Es decir, la sintaxis de una expresión en C. Ahora, por alguna razón, C99 aparentemente no quería permitir operadores de coma dentro de [] . No sé por qué, tal vez haría que los declaradores de parámetros de matriz calificada/estática fueran demasiado extraños. Entonces, en lugar de usar expresión en la sintaxis del declarador directo , eligieron el siguiente grupo de operadores por encima del operador de coma, los operadores de asignación.

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