vectores transpuesta punteros objetos new matriz matrices ejemplos dinamicos dinamico dinamica con bidimensionales arreglos c++ c array-initialization

transpuesta - punteros arreglos bidimensionales c++



¿Se permite el tamaño de la matriz en tiempo de ejecución sin asignación dinámica? (7)

He estado usando C ++ durante algunos años, y hoy vi un código, pero ¿cómo puede ser esto perfectamente legal?

int main(int argc, char **argv) { size_t size; cin >> size; int array[size]; for(size_t i = 0; i < size; i++) { array[i] = i; cout << i << endl; } return 0; }

Compilado bajo GCC.

¿Cómo se puede determinar el tamaño en tiempo de ejecución sin new o malloc ?

Solo para verificarlo, he buscado en Google y todos los códigos similares a los míos dicen tener un error de tamaño de almacenamiento.

Incluso el Programa De Cómo C ++ de Deitel p. 261 estados en Common Programming Error 4.5:

Solo las constantes se pueden usar para declarar el tamaño de las matrices automáticas y estáticas.

Enlight me.



Es válido C99, no es válido C ++. Esta es una de las pocas diferencias entre los dos idiomas.


Este código se ejecuta en el compilador GNU GCC.

#include<bits/stdc++.h> int main(int argc, char **argv) { size_t size; std:: cin >> size; int array[size]; for(size_t i = 0; i < size; i++) { array[i] = i; std:: cout << i; } return 0; }


Esto es válido en C99.

El estándar C99 admite matrices de tamaño variable en la pila. Probablemente su compilador también haya elegido apoyar esta construcción.

Tenga en cuenta que esto es diferente de malloc y new . gcc asigna la matriz en la pila, al igual que lo hace con int array[100] simplemente ajustando el puntero de la pila. No se realiza la asignación de montón. Es más o menos como _alloca .


Esto se conoce como VLA (arrays de longitud variable). Es estándar en c99, pero gcc lo permite en código c ++ como una extensión. Si quiere que rechace el código, intente experimentar con -std=standard , -ansi y -pedantic options.


Los arrays de longitud variable (VLA) se admiten en el estándar C ++ 14, que se aceptó recientemente y está en espera de publicación.


Puede dar tamaño a una matriz de forma dinámica si está utilizando el compilador Dev-Cpp. Lo he probado y no he obtenido ningún error, pero en compiladores visuales de c ++ y visual studio no es posible. Creo que la razón es que dev-c ++ asigna un número positivo al int no inicializado y cuando le damos un número se lo reemplaza por el dado. pero quizás otros compiladores den nulo a variables no inicializadas.