2016-10-27 3 views
0

무언가가 예상대로 작동합니다배열이 때때로 링크되는 이유는 무엇입니까? 이 같은

 Dim test(1) As Integer 
     test = {1, 2} 
     Dim test2(1) As Integer 
     test2 = test 
     test = {3, 4} 
     test2 = {4, 5} 

하지만 가끔은 다른 동일하게 하나 개의 배열을 설정 한 후, 하나의 변경은 다른 영향을 미칠 것입니다. 이로 인해 어디서나 .clone을 추가해야합니다. 왜 이런거야?

+0

배열 변수는 기본적으로 데이터를 가리키는 메모리 주소를 보유합니다. test2 = test로 설정하면 데이터 자체가 아닌 데이터를 가리키는 주소가 복사됩니다. 당신은 첫 번째 배열로부터 새로운 배열을 redim해야한다. – soohoonigan

+0

배열 변수는 배열 데이터에 대한 포인터 일뿐입니다. 배열 변수를 다른 배열 변수로 할당하면 두 변수가 동일한 데이터를 가리 킵니다. 변경은 두 배열 모두에 적용됩니다. –

+0

배열이 참조 유형입니다. 변수는 메모리의 데이터 만 가리 킵니다. [** the MSDN **] (https://msdn.microsoft.com/en-us/library/t63sy5hs.aspx)에서 참조 유형 및 값 유형에 대해 읽을 수 있습니다. –

답변

3

코드 test2 = test은 두 변수 test2test이 동일한 배열을 가리 키도록합니다. 당신이 좋아하는 배열을 변경 한 경우 :

test2(1) = 0 
test(0) = 99 

가 같은 배열 있습니다 때문에 그런 다음 모두 이러한 변화는 testtest2 모두를 통해 볼 수있다.

그러나, 당신이 할 때

당신은 기존의 배열을 변경하지 않는
test = {3, 4} 

; 당신은 새로운 것을 만들고 그것을 test으로 가리키고 있습니다. test2 = test과 같은 방식으로 작동합니다. 변수를 메모리의 다른 배열을 가리 키도록 리디렉션합니다.

그렇다면 두 개의 개별 배열을 사용하는 것으로 돌아가고 하나의 변경 사항은 다른 배열에 반영되지 않습니다.

0

test2 = test 즉, 이러한 개체 참조는 동일한 개체를 참조합니다. 따라서 test을 변경하면 test2도 변경됩니다.

관련 문제