3

持っていることの実際的な違いは何ですか

subroutine fillName(person)
   type(PersonType), intent(inout) :: person

   person%name = "Name"
end subroutine

または次の

subroutine fillName(person)
   type(PersonType), pointer :: person

   person%name = "Name"
end subroutine
4

2 に答える 2

2

pointer裸の説明にはない特定の引数要件があります。基本的に、仮引数personはポインター ターゲットに関連付ける必要があります。割り当てまたは単純なポインター割り当て ( =>) による可能性があります。注意すべき重要な点はperson、サブルーチンの実行中に仮引数のポインターの関連付けを変更すると、渡される実引数に反映されるということです。そのままの記述は参照によって実際の引数を渡しますが、ポインターの関連付けは渡しません。

于 2011-02-03T17:24:57.433 に答える
1

キーワードが実用的であると仮定すると、あなたが与える例の実際の違いは読みやすさになります。どちらも機能しますが、intent(inout)より明示的であるためです。

技術的な違いは、ポインターが null または不定である可能性があるのに対しintent(inout)、変数を割り当てる必要があることです。サブルーチン内でポインターを関連付けたり無効にしたりすることもできますが、仮引数を使用するintent(inout)ことはできません。

pointerどちらも指定せずintent(inout)、引数にポインターを渡す場合は、関連付ける必要があります。

于 2011-02-15T03:16:51.380 に答える