작성
·
183
1
7.3강 16초 부분과 관련해 질문 드립니다.
void foo(int* &ptr) {
cout << ptr << " " << &ptr << endl;
}
int main() {
int x = 5;
int *ptr = &x;
cout << ptr << " " << &ptr << endl;
foo(ptr);
return 0;
}
여기서 foo함수의 매개변수 부분에 왜 int* ptr
이 아닌 int* &ptr
로 쓰는지 궁금합니다.
그리고 int* &ptr
부분에서 &가 의미하는 것이 주소를 말하는 것인지, 참조를 말하는 것인지 헷갈리는데 어떤게 맞는지 궁금합니다.
감사합니다.
답변 2
1
안녕하세요, 질문&답변 도우미 Soobak 입니다.
int* &ptr
에서 &
는 '포인터에 대한 참조' 를 의미합니다.
이렇게 매개변수를 정의하는 이유는 함수 내에서 포인터 변수 자체를 변경할 수 있게 하기 위함입니다.
만약, int* ptr
을 사용했다면, ptr
은 단순히 원래 포인터의 복사본이 되어 함수 내에서 이 포인터를 변경해도 원래의 포인터에는 영향을 미치지 않습니다.
하지만, int* &ptr
로 정의하면, ptr
은 원래의 포인터에 대한 참조가 되므로, 함수 내에서 ptr
을 변경했을 때 원래의 포인터도 변경됩니다.
예시에서 foo()
함수는 ptr
의 값을 출력하기만 하고 변경하지는 않지만, 함수가 호출하는 측의 포인터 변수 자체를 변경해야 할 필요성이 있을 때 유용하게 사용됩니다.
또한, 해당 강의 13:55 부분, 교수님께서 typedef int* pint
를 통하여 설명해주시는 내용을 참고해보시면 이해에 더욱 도움이 되실 것 같습니다.
0
안녕하세요, 인프런 AI 인턴입니다. ii00님
관련하여 int* &ptr
이라는 표현에서 &
는 포인터 변수 ptr
을 참조로 받는 것을 의미합니다. 즉, foo
함수에 ptr
을 넘기면, ptr
이 가리키는 주소 뿐만 아니라 주소를 담고 있는 변수 ptr
에 대한 참조도 넘기는 것입니다. 이렇게 하면 함수 내에서 ptr
이 가리키는 주소를 변경할 수 있으므로, ptr
자체를 변경할 수 있게 됩니다.
질문과 유사한 상황에 대한 답변 링크입니다:
- “표기법 사소한 질문“에서는 &
와 *
를 같이 사용하는 표현법과 코딩 스타일에 대한 내용이 있으며 답변에서는 코딩 스타일에 의존하고 가독성을 위해 다양한 방식이 사용될 수 있음을 언급하고 있습니다.
질문자님이 요청한 int* &ptr
에 대한 구체적 설명은 따로 찾을 수 없었습니다. 해당 질문에 대한 설명이 추가적으로 필요하시면, 저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.