DIMENSION

文と属性:オブジェクトが配列であることを指定し,配列の形状を定義します。

DIMENSION 属性は型宣言文または DIMENSION 文で指定することができ,以下のいずれかの形式を取ります。

形式

型宣言文

type,[att-ls,]DIMENSION(a-spec)[,att-ls]::a[(a-spec)][,a[(a-spec)]]...

DIMENSION[::]a(a-spec)[,a(a-spec)]...

type
データ型指定子。

att-ls
省略可能な属性指定子並び。

a-spec
配列指定。以下のどれかを取ります。

詳細は,「配列の宣言文」を参照してください。

型宣言文では,配列後の配列指定は,DIMENSION 後の配列指定よりも優先されます。

a
宣言される配列の名前。

規則と振る舞い

DIMENSION 属性は,個々の名前付き配列にいくつかの記憶域要素を割り付けます。この際には,各次元の個々の配列要素に 1 つの記憶域要素が割り付けられていきます。各記憶域要素の大きさは,配列のデータ型によって決まります。

配列に割り付けられる記憶域要素の総数は,配列指定の各次元の要素数を掛け合わせた数に等しくなります。たとえば,次に示す文は,ARRAY を 4 バイトの実数要素を 16 個持つ配列として,MATRIX を 4 バイトの整数要素を 125 個持つ配列として定義しています。

	DIMENSION ARRAY(4,4), MATRIX(5,5,5)

配列は次の文でも宣言することができます。

ALLOCATABLEPOINTERTARGET,および COMMON

互換性

CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB

関連情報

ALLOCATE配列配列の宣言文

以下の例は,DIMENSION 属性を指定する型宣言文を示しています。

	REAL, DIMENSION(10, 10) :: A, B, C(10, 15)	! C の後の指定は
							! DIMENSION の後の指定を
							! 無効にします。
	REAL, ALLOCATABLE, DIMENSION(:) :: E

以下に DIMENSION 文の例を示します。

	DIMENSION BOTTOM(12,24,10)
	DIMENSION X(5,5,5), Y(4,85), Z(100)
	DIMENSION MARK(4,4,4,4)

	SUBROUTINE APROC(A1,A2,N1,N2,N3)
	DIMENSION A1(N1:N2), A2(N3:*)

	CHARACTER(LEN = 20) D
	DIMENSION A(15), B(15, 40), C(-5:8, 7), D(15)

型と ALLOCATABLE 文を使って配列を宣言することもできます。以下に例を示します。

	INTEGER A(2,0:2)
	COMPLEX F
	ALLOCATABLE F(:,:)
	REAL(8), ALLOCATABLE, DIMENSION( :, :, : ) :: E

次元の上限と下限の両方を指定することができます。たとえば,1 つの配列が 28 から 112 の番号のついた実験結果から得られたデータで構成されているとすると,以下のように配列の次元を設定することができます。

	DIMENSION experiment(28:112)

これにより,experiment72 からデータを参照するには,experiment(72) を引用します。

配列要素は,列主順で保存されます。つまり,配列が連続したメモリー・アドレスにマップされる時,最も左の添字が最初に増加されます。たとえば,以下の文を考えます。

	INTEGER(2) a(2, 0:2)
	DATA a /1, 2, 3, 4, 5, 6/

これらは,次と等価です。

	INTEGER(2) a
	DIMENSION a(2, 0:2)
	DATA a /1, 2, 3, 4, 5, 6/

もし a がメモリーの 1000 という場所に置かれたとすると,次の DATA 文は以下のマッピングを生成します。

配列要素 アドレス
a(1,0) 1000 1
a(2,0) 1002 2
a(1,1) 1004 3
a(2,1) 1006 4
a(1,2) 1008 5
a(2,2) 100A 6

以下の DIMENSION 文は,副プログラムで大きさ引継ぎ配列を定義しています。

	DIMENSION data (19,*)

実行時に,配列データには呼び出しプログラムの対応する配列の大きさが与えられます。

次のプログラムの 1 部は,2 つの配列の次元を確保しています。

	...
	SUBROUTINE Subr (matrix, rows, vector)
	REAL MATRIX, VECTOR
	INTEGER ROWS
	DIMENSION MATRIX (ROWS,*), VECTOR (10), LOCAL (2,4,8)
	MATRIX (1,1) = VECTOR (5)
	...