real A( 5, 2 )

call s( A )

subroutine s( A )
real A( 4, 2)

・・・

end

上のようなプログラムを作った場合、例えばメインプログラムのA(1,2)と
サブルーチンのA(1,2)は違うものになってしまいます。C言語と配列の
メモリ上配置が違うためというのは分かったのですが、これに対処するために
どうすればよいでしょうか?

・配列の添え字を逆にする。
・最後の添え字の次元をサブルーチンに渡す。

この2つしか思いつかないのですがどちらもわずらわしいです。
なにかいい方法は無いですか?