Consider the following example,
    PROGRAM Proggie  
     IMPLICIT NONE
     REAL ::  A, B, C
     CALL sub(A)    
    CONTAINS
     SUBROUTINE Sub(D) 
      REAL :: D      ! D is dummy (alias for A)
      REAL :: C      ! local C (diff to Proggie's C)
       C = A**3      ! A cannot be changed
       D = D**3 + C  ! D can be changed
       B = C         ! B from Proggie gets new value
     END SUBROUTINE Sub
    END PROGRAM Proggie
In Sub, as A is argument associated it may not be have its value changed but may be referenced.
C in Sub is totally separate from C in Proggie, changing its value in Sub does not alter the value of C in Proggie.
For more information, click here