vectorial tablas producto memoria matrices hacer ejemplo dinamica arreglos allocate allocatable arrays memory-management fortran fortran90 gfortran

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.