2011-02-02 5 views
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 

答えて

2

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

1

私はキーワードが実用、 であると仮定した場合の作業が、intent(inout)両者がより明示的であるため、その後、あなたが与える例では実用的な違いは、可読性だろう。

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

pointerまたはintent(inout)のいずれも指定しておらず、引数にポインタを渡す必要がある場合は、それを関連付ける必要があります。