Matrices de longitud variable

Una matriz de longitud variable, que es una característica C99 , es una matriz de duración de almacenamiento automático cuya longitud se determina en tiempo de ejecución.

Sintaxis del declarador de matriz de longitud variable

Leer diagrama de sintaxisOmitir diagrama de sintaxis visualidentificador_matriz[ expresióncalificadores de tipo* ]

Si el tamaño de la matriz se indica mediante * en lugar de una expresión, se considera que la matriz de longitud variable tiene un tamaño no especificado. Estas matrices se consideran tipos completos, pero sólo se pueden utilizar en declaraciones de ámbito de prototipo de función.

Una matriz de longitud variable y un puntero a una matriz de longitud variable se consideran tipos modificados de forma variable. Las declaraciones de tipos modificados de forma variable deben estar en el ámbito de bloque o en el ámbito de prototipo de función. Los objetos de matriz declarados con el especificador de clase de almacenamiento extern no pueden ser de tipo matriz de longitud variable. Los objetos de matriz declarados con el especificador de clase de almacenamiento static pueden ser un puntero a una matriz de longitud variable, pero no una matriz de longitud variable real. No se puede inicializar una matriz de longitud variable.

Nota: En aplicaciones C++, el almacenamiento asignado para que lo utilicen las matrices de longitud variable no se libera hasta que la función en la que residen finaliza la ejecución.

Una matriz de longitud variable puede ser el operando de una expresión sizeof . En este caso, el operando se evalúa en tiempo de ejecución, y el tamaño no es una constante entera ni una expresión constante, aunque el tamaño de cada instancia de una matriz de variables no cambie durante su vida útil.

Se puede utilizar una matriz de longitud variable en una sentencia typedef . El nombre de typedef sólo tendrá un ámbito de bloque. La longitud de la matriz se fija cuando se define el nombre typedef , no cada vez que se utiliza.

Un parámetro de función puede ser una matriz de longitud variable. Las expresiones de tamaño necesarias deben proporcionarse en la definición de función. El compilador evalúa la expresión de tamaño de un parámetro modificado de forma variable en la entrada a la función. Para una función declarada con una matriz de longitud variable como parámetro, como en la siguiente,
void f(int x, int a[][x]);
el tamaño del argumento de matriz de longitud variable debe coincidir con el de la definición de función.

La extensión C++ no incluye soporte para referencias a un tipo de matriz de longitud variable; tampoco puede un parámetro de función ser una referencia a un tipo de matriz de longitud variable.

Información relacionada