컴퓨터관련

ByVal, ByRef... 매개변수...비주얼베이직...펌

맘편한넘 2010. 11. 22. 19:57
비베개념으로 설명하자면,

byref는...
넘겨준 변수와 받은 변수를 동일한 변수로 취급하는겁니다.

call callbyref(a)
private sub callbyref(byref i as integer)
에서 i는 그저 a의 별칭일뿐, i가 곧 a라고 생각하시면 됩니다.
즉 위 함수의 실제코드는...

private sub command1_click()
    dim a as integer
    ....

private sub callbyref( a -- command1_click에서 동일변수임)
    a=10
end sub

반면 byval은 별다른 변수에 복사되는 개념입니다.
즉, i와 a는 완전 별개의 변수입니다.

call callbyval(a)
private sub callbyval(
byval i as integer  <=요기부분
)

에서...요기라고 표시된 부분에서 숨겨진 코드는

private sub callbyval
(
dim i as integer
i =a  <=call callbyval(a)
)
입니다. 대입연산자가 복사이므로 그래서 복사에 의한 인자 전달이라고 부릅니다.

-----------------------
C언어 개념에서 보면, 더 쉽습니다.
byref는 포인터에 의한 전달, byval은 값에 의한 전달입니다.

private sub command1_click()
    dim a as integer
    ....

private sub callbyref
    i as 정수포인터 
   i =&a;
)
    *i =10
end sub

call callbyval(a)
private sub callbyval(
byval i as integer  
i =a
)
    i=100
end sub

입니다.