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.
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.
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.
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.
