2012-09-30 2 views
3

그 의미는 무엇입니까? 참조에 의한 패스 사용은 참조를 전달하는 것이므로 리턴 값없이 포인터를 직접 변경할 수 있으며 포인터에 의한 패스는 유사하지만 실행 시간은 느립니다. 그러나, 나는 무엇을 이해하지 않는다 * & 않습니다. 예를 들어"패스 * *"란 무엇입니까?

foo(int * & var) { } 
+5

나는 "포인터에 의한 패스가 비슷하지만 더 느린 런타임"으로 어디에서 갈지 확신하지 못합니다. 모든 의도와 목적을 위해 포인터로 또는 참조에 의해 객체를 전달하는 성능은 동일합니다 (참조에 의한 전달은 흔히 후드 아래의 포인터를 사용하여 구현됩니다). –

답변

5

포인터가 참조를 전달하므로 포인터가 가리키는 내용을 변경하고 해당 변경 사항을 호출자에게 반영 할 수 있습니다. 예를 들어

는 :

void notByReference(int *p) { 
    p = nullptr; 
} 

void byReference(int *&p) { 
    p = nullptr; 
} 

int main() { 
    int *i = new int; 
    notByReference(i); //i is not changed since a copy of the pointer was passed 
    byReference(i); //i itself is changed, leaking memory 
} 
+0

아, 그렇습니다. 참조는 포인터 값을 전달하는 것과 같습니다. – Goyatuzo

+0

@ Goyatuzo, 예, 값으로 포인터를 전달하여 사본을 만듭니다. 복사본은 동일한 것을 가리키고 있으므로 포인터가 궁극적으로 변경 될 수는 있지만 포인터 자체는 다르므로 다른 곳을 가리 키도록 수정하면 복사본에만 적용됩니다. – chris

+0

굉장! 신속하고 포괄적 인 답변을 보내 주셔서 감사합니다! – Goyatuzo

2

이 참조로 포인터를 전달할 수 있습니다. 함수를 통해 포인터를 수정하고 호출자가 수정 한 내용을 볼 수 있습니다.

당신은 거기서 멈추지 않아도됩니다. 예를 들어 int를 가리키는 포인터를 가리키는 포인터를 전달할 수 있습니다.

void foo(int** &var) 
1

&* 같은 한정자를 입력 명심은 서로 독립적입니다. some_type&을 보면 단순히 "sometype에 대한 참조"를 의미하며, 이는 함수가 호출자의 인수 버전을보고 수정할 수 있음을 의미합니다. sometype이 포인터 인 경우에는 호출자 버전의 인수 유형이 포인터이고 함수가 해당 포인터를 수정할 수 있음을 의미합니다.