arrays - tablas - memoria dinamica en fortran
Fortran 90 Diferencias al declarar matriz asignable (2)
El primer caso es una matriz asignable. El número de elementos en la matriz se puede asignar o reasignar dinámicamente en tiempo de ejecución en cualquier ámbito.
El segundo caso es una matriz automática de un número fijo de elementos definidos por el argumento ficticio. Su tamaño solo se puede cambiar localmente dentro del procedimiento al que se llama, de acuerdo con el tamaño aprobado en el argumento ficticio.
¿Hay alguna diferencia entre
integer, intent(in) :: n
integer, dimension(:), allocatable :: a
allocate(a(n))
y
integer, intent(in) :: n
integer, dimension(n) :: a
¿En qué situación usaríamos la primera versión? Tal vez malentendí la matriz asignable, ¿es la segunda versión incluso una matriz asignable?
El segundo caso de hecho no tiene a
asignable. Es, sin embargo, un objeto automático .
Ignorando las diferencias prácticas en el uso de la memoria en el nivel de implementación, hay una gran diferencia. Sí, cada a
es (suponiendo que las cosas no se indiquen explícitamente en la pregunta) una variable local que es, después de la allocate
y la creación automática, de tamaño n
, pero en el primer caso es asignable. Se puede desasignar, reasignar (tal vez a un tamaño diferente) y desasignar nuevamente. Y así.
El objeto automático (segundo caso) no puede ser.