2016-06-10 2 views
-1

나는이 두 가지 소스를 찾았지만 똑같은 것을합니다. 나는 차이가 있는지 없는지 궁금 해서요. 그러나 나는 그것을 이해할 수 없었습니다.이 두 포인터 코드의 차이점

누구나 저에게 차이점을 말할 수 있습니까? 언제 사용해야합니까?

이 처음이다

void function1(int *x) { 
    *x = 100; 
} 

int main() { 
    int var1 = 10; 

    function1(&var1); 
    cout << var1 << endl; 
} 

및이 두 번째이다 int &x이 기준 반면

void function2(int &x) { 
    x = 100; 
} 

int main() { 
    int var2 = 10; 

    function2(var2); 
    cout << var2 << endl; 
} 
+0

'function1'에서,'nullptr'은 유효한 인자입니다 (체크되어야 함). – Jarod42

+0

수정 된 객체에 대한 포인터를 선호하는 스타일 규칙이 있습니다. – Jarod42

+0

[Strongly related] (http://stackoverflow.com/questions/114180/pointer-vs-reference) –

답변

2

int *x 포인터이다. 아마도 가장 큰 차이점은 참조가 가리키는 곳을 변경할 수 없다는 것입니다.

0

첫 번째는 포인터이고 두 번째는 참조입니다. 아이디어에는 약간의 유사점이 있지만 차이점도 있습니다.

포인터는 C 및 C++ 메커니즘이며 조금 더 "순수"하지만 포인터 연산과 같은 고급 개념에 더 많은 도움을줍니다. 참조는 C++에서만 사용되며 참조가 사용되는 동안 일반 varible과 동일한 구문으로 참조가 사용되므로보다 안전하고 내재적입니다. 포인터는 * var를 사용하여 명시 적으로 역 참조해야하므로 명시 적으로 값을 사용하거나 변경하려면 명시 적입니다.