陣列性質規範等級和形狀
物件上的 dimension
屬性指定該物件是一個陣列。在 Fortran 2008 中,有五個陣列性質: 1
- 明確的形狀
- 假設的形狀
- 假定大小
- 延遲的形狀
- 隱含的形狀
取三個 1 級陣列 2
integer a, b, c
dimension(5) a ! Explicit shape (default lower bound 1), extent 5
dimension(:) b ! Assumed or deferred shape
dimension(*) c ! Assumed size or implied shape array
通過這些可以看出,需要進一步的上下文來完全確定陣列的性質。
明確的形狀
顯式形狀陣列始終是其宣告的形狀。除非將陣列宣告為子程式或 block
構造的區域性,否則定義形狀的邊界必須是常量表示式。在其他情況下,顯式形狀陣列可以是自動物件,使用範圍可以在子程式或 block
的每次呼叫時變化。
subroutine sub(n)
integer, intent(in) :: n
integer a(5) ! A local explicit shape array with constant bound
integer b(n) ! A local explicit shape array, automatic object
end subroutine
假設形狀
假定的形狀陣列是沒有 allocatable
或 pointer
屬性的偽引數。這樣的陣列從與之關聯的實際引數中獲取其形狀。
integer a(5), b(10)
call sub(a) ! In this call the dummy argument is like x(5)
call sub(b) ! In this call the dummy argument is like x(10)
contains
subroutine sub(x)
integer x(:) ! Assumed shape dummy argument
end subroutine sub
end
當偽引數假定為形狀時,引用該過程的作用域必須具有可用於該過程的顯式介面。
假設大小
假定的大小陣列是一個偽引數,其大小由其實際引數假定。
subroutine sub(x)
integer x(*) ! Assumed size array
end subroutine
假定的大小陣列與假定的形狀陣列的行為非常不同,這些差異在別處記錄。
延遲形狀
延遲形狀陣列是具有 allocatable
或 pointer
屬性的陣列。這種陣列的形狀由其分配或指標賦值決定。
integer, allocatable::a(:)
integer, pointer::b(:)
隱含的形狀
隱含形狀陣列是一個命名常量,它從用於建立其值的表示式中獲取其形狀
integer, parameter::a(*) = [1,2,3,4]
這些陣列宣告對偽引數的含義將在別處記錄。
1 擴充套件 Fortran 2008 的技術規範增加了第六種陣列性質:假設等級。這裡沒有涉及。
2 這些可以等同地寫成
integer, dimension(5) :: a
integer, dimension(:) :: b
integer, dimension(*) :: c
要麼
integer a(5)
integer b(:)
integer c(*)