> 백엔드 개발 > C++ > 본문

C 함수의 포인터와 참조: 기능적 동등성 또는 미묘한 차이점?

Susan Sarandon
풀어 주다: 2024-11-03 00:43:29
원래의
1002명이 탐색했습니다.

Pointers vs. References in C   Functions: Functional Equivalence or Subtle Differences?

포인터 대 참조 매개변수: 기능적 동등성과 미묘한 차이

C에서 포인터와 참조는 모두 함수에 대한 매개변수로 사용되지만, 동작과 의미가 다릅니다. 이 두 매개변수 유형의 주요 차이점을 자세히 살펴보겠습니다.

foo()와 foo()가 동일합니까?

아래 스니펫은 매개변수 유형이 서로 다른 두 함수를 보여줍니다. :

<code class="cpp">int foo(bar* p) {
  return p->someInt();
}

int foo(bar& r) {
  return r.someInt();
}</code>
로그인 후 복사

기능적으로 다음 조건이 충족되면 이 두 함수는 동일합니다.

  • someInt()는 가상이 아닙니다.
  • 함수는 전달됩니다. bar 또는 그 하위 클래스의 인스턴스.

이유는 포인터 매개변수와 참조 매개변수 모두 동일한 메모리 위치에 대한 직접 액세스를 제공하기 때문입니다. 이 경우 액세스 구문(., ->)의 차이는 미미합니다.

포인터 및 참조를 통한 할당

아래 줄은 다음과 같은 할당 작업을 보여줍니다. 포인터 및 참조:

<code class="cpp">bar& ref = *ptr_to_bar;</code>
로그인 후 복사

이 할당에는 데이터 슬라이싱이나 손실이 포함되지 않습니다. ptr_to_bar가 가리키는 개체의 값을 참조 참조에 할당합니다.

기능을 넘어서는 미묘한 차이점

위 예에서 포인터와 참조는 동일한 기능을 가지고 있지만, 주의해야 할 미묘한 차이점이 있습니다.

  • Nullable: 포인터에는 NULL을 할당할 수 있지만 참조에는 할당할 수 없습니다.
  • 역참조: 포인터의 주소는 포인터 변수의 주소를 산출하는 반면, 참조의 주소를 취하면 참조된 변수의 주소를 산출합니다.
  • 재할당: 참조는 일단 초기화되면 재할당할 수 없지만, 포인터는 다른 객체를 가리키도록 재할당될 수 있습니다.

위 내용은 C 함수의 포인터와 참조: 기능적 동등성 또는 미묘한 차이점?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿