2017-02-23 1 views
3

나는 하나의 일반적인 질문을 가지고, 왜 내가 참조로 포인터의 주소를 전달할 수 없습니까?포인터가 주소를 함수의 참조로

void domdom(string &foo) 
{ 
foo = ""; 
} 

string fooso = "blabal"; 
string* p_fooso = fooso; 

domdom(p_fooso); // <-- why is that not possible? And what should I pass to be able to modify foosoo? 

은 내가 (string* foo)을 수용 할 수있는 기능 domdom을 변경할 수 있습니다 알고 있지만, 포인터 및 주어진 함수를 사용하여 함수의 string fooso을 수정하는 것도 가능하다?

+1

'string * p_foos = fooso;'는 오류입니다. 컴파일러 출력을 확인하십시오. –

답변

6

포인터의 주소를 참조로 전달할 수없는 이유는 무엇입니까?

이것이 언어 정의 방법입니다. 직접 실물을

domdom(*p_fooso); 

또는 통과 :

대신 포인터를 역 참조 문자열에 대한 참조를 얻을 수

domdom(fooso); 
또한

주의가 'string* p_fooso = fooso; 아무튼 t 컴파일. string* p_fooso = &fooso;을 써야합니다.

+0

감사합니다, 나는 포인터가 같은 방식으로 참조뿐만 아니라 주소를 저장 생각. – Ammy

+0

@Ammy 참고 문헌은 주소를 내부적으로 저장하지만 매우 다른 방식으로 사용되므로이 둘은 고의로 상호 교환 할 수 없게 만들어졌습니다. – user4815162342

2

p_fooso를 문자열 참조 유형으로 선언하기 만하면됩니다. 변수의 이름을 r_fooso로 바꿀 수도 있습니다!

string& r_fooso=fooso; 
1

포인터 및 참조는 후드 아래 비슷하지만, 혼동을 피하기 위해, 왜 암시 적 변환에 의해 그들을 혼합은 C++에서 허용되지 않는 다르게 사용된다.

은 항상 포인터의 참조를 명시 적으로 변환 할 수 있지만은 복사본의 오버 헤드가 없습니다. 예를 들어 함수를 domdom(*p_fooso)으로 호출하면 이됩니다. 즉, 함수는 포인터를 역 참조하기 만하면 정확한 객체에 대한 참조를받습니다.

관련 문제