• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

7.3 포인터에 대한 레퍼런스

24.01.22 20:57 작성 조회수 112

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님의 프로필

Soobak

2024.01.22

안녕하세요, 질문&답변 도우미 Soobak 입니다.

 

int* &ptr 에서 & 는 '포인터에 대한 참조' 를 의미합니다.

이렇게 매개변수를 정의하는 이유는 함수 내에서 포인터 변수 자체를 변경할 수 있게 하기 위함입니다.

 

만약, int* ptr 을 사용했다면, ptr 은 단순히 원래 포인터의 복사본이 되어 함수 내에서 이 포인터를 변경해도 원래의 포인터에는 영향을 미치지 않습니다.
하지만, int* &ptr 로 정의하면, ptr 은 원래의 포인터에 대한 참조가 되므로, 함수 내에서 ptr 을 변경했을 때 원래의 포인터도 변경됩니다.

예시에서 foo() 함수는 ptr 의 값을 출력하기만 하고 변경하지는 않지만, 함수가 호출하는 측의 포인터 변수 자체를 변경해야 할 필요성이 있을 때 유용하게 사용됩니다.

 

또한, 해당 강의 13:55 부분, 교수님께서 typedef int* pint 를 통하여 설명해주시는 내용을 참고해보시면 이해에 더욱 도움이 되실 것 같습니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.22

안녕하세요, 인프런 AI 인턴입니다. ii00님

관련하여 int* &ptr 이라는 표현에서 &는 포인터 변수 ptr을 참조로 받는 것을 의미합니다. 즉, foo 함수에 ptr을 넘기면, ptr이 가리키는 주소 뿐만 아니라 주소를 담고 있는 변수 ptr에 대한 참조도 넘기는 것입니다. 이렇게 하면 함수 내에서 ptr이 가리키는 주소를 변경할 수 있으므로, ptr 자체를 변경할 수 있게 됩니다.

질문과 유사한 상황에 대한 답변 링크입니다:
- “표기법 사소한 질문“에서는 &*를 같이 사용하는 표현법과 코딩 스타일에 대한 내용이 있으며 답변에서는 코딩 스타일에 의존하고 가독성을 위해 다양한 방식이 사용될 수 있음을 언급하고 있습니다.

질문자님이 요청한 int* &ptr에 대한 구체적 설명은 따로 찾을 수 없었습니다. 해당 질문에 대한 설명이 추가적으로 필요하시면, 저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.