>백엔드 개발 >C++ >C에서 포인터와 참조 매개변수는 기능적으로 동일합니까?

C에서 포인터와 참조 매개변수는 기능적으로 동일합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-03 02:13:29774검색

Are Pointer and Reference Parameters Functionally Identical in C  ?

포인터 매개변수와 참조 매개변수 비교: 자세한 조사

질문:

포인터 매개변수를 수행하세요. (예: int foo(bar* p) { ... }) 및 참조 매개변수(예: int foo(bar& r) { ... })는 C에서 동일하게 작동합니까?

답변:

포인터와 참조의 차이점은 표준의 구현 세부 사항 그 이상입니다. 참조는 기본적으로 변수에 대한 별칭을 생성하는 구문 설탕 개념을 구현합니다. 이를 통해 컴파일러는 포인터가 복잡성을 추가하는 코드를 최적화할 수 있습니다.

기능적 동등성:

널 포인터 문제가 없다고 가정하면 foo(bar* p) 및 foo 함수는 (bar& r)은 someInt() 메서드가 가상이 아닌 경우 본질적으로 동일합니다. 두 함수 모두 매개변수를 통해 객체의 멤버 함수에 직접 액세스합니다. 그러나 someInt()가 가상인 경우 참조 기반 매개 변수 함수(foo(bar& r))는 실제 객체 유형을 기반으로 올바른 메서드를 호출하는 반면 포인터 기반 함수(foo(bar* p))는 항상 기본 클래스 메서드를 호출합니다.

참조에 할당:

할당 bar& ref = *ptr_to_bar는 슬라이싱을 발생시키지 않습니다. 참조 참조는 ptr_to_bar가 가리키는 개체의 별칭을 지정하여 해당 멤버에 직접 액세스할 수 있도록 합니다.

추가 차이점:

  • 참조에는 NULL을 할당할 수 없습니다.
  • 포인터의 주소는 포인터 변수의 주소를 생성하고, 참조의 주소는 참조된 변수의 주소를 생성합니다.
  • 한 번 초기화되면 참조를 다시 할당할 수 없습니다.

위 내용은 C에서 포인터와 참조 매개변수는 기능적으로 동일합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.