2014-11-01 4 views
-1
#include <iostream> 

using namespace std; 

void reference(int &ref){ 
    cout << ref << endl; 
} 

void pointer(int *ref){ 
    cout << *ref << endl; 
} 

int main(){ 
    int *i = new int[1]; 
    *i = 10; 
    reference(*i); // fine 
    reference(i); // why not compiling!!! why not referencing to my pointer?? 
    pointer(i);  // fine 
} 

포인터를 참조하고 싶습니다. 포인터는 아니지만 값을 참조 할 수 있습니다. 아닌``int` 변수를 -포인터를 참조 할 수없는 이유는 무엇입니까?

reference(i); 

+0

다음과 같이 할 수 있습니다.'void pointer (int * & ref) {'. 당신이 실제로 무엇을 요구하고 있는지 약간 불분명합니다. –

+1

크래시가 발생하지 않습니다. 컴파일 오류입니다. –

+0

그러나 왜 투표가 내려 졌는지, 유효한 질문 인 것 같습니까 ?? –

답변

1

의 서명을 참조하십시오.

난 당신이 같은 뭔가를 찾고 생각 : 다음

void reference(int& ref){ 
    cout << ref << endl; 
} 

void reference(int*& ref){ 
    cout << *ref << endl; 
} 

, 당신은 둘 다 사용할 수 있습니다 : 모든 "충돌"의

int main(){ 
    int *i = new int[1]; 
    *i = 10; 
    reference(*i); 
    reference(i); 
    return 0; 
} 
+0

그러면 첫 번째 호출 참조가 작동하지 않습니다! –

+0

그런 경우 두 가지가 필요합니다. –

+0

... 메인에서 값을 반환합니다. –

1

이 줄은 int * 전달하기 위해 노력하고있다. 따라서 컴파일되지 않습니다.

유형 int*의 객체가 자동으로 int&로 변환 할 수없는 기능

1

먼저 당신이 단지를 통해받은 후 사용할 수있는 용어입니다 컴파일러 ...

void reference(int &ref) 

이 함수는 포인터를 전달하는 동안 매개 변수로 정수를 참조합니다 를 통해 정수로

reference(i) 
같은 뭔가 함수의 서명을 변경

: -

void reference(int* &ref) 

작업이 호출. 또는 다음과 같이 전화를 변경하십시오. -

int i; 
reference(i); 

이 기능을 사용하려면 다음과 같이하십시오.

+0

네,이 말은 .. 단지 함수의 매개 변수 타입을 int의 포인터를 참조하는 데 사용해야합니다. 감사합니다. –

관련 문제