Essence:
참조는 별칭이고 포인터는 주소입니다
#🎜🎜 ## 🎜🎜#특정:
1. 현상적으로 포인터는 런타임에 가리키는 값을 변경할 수 있습니다. 객체에 바인딩되면 변경되지 않습니다. 이 문장은 다음과 같이 이해될 수 있습니다. 포인터는 다른 객체를 가리키도록 재할당될 수 있습니다. 그러나 참조는 항상 초기화 중에 지정된 개체를 가리키며 나중에 변경할 수 없지만 지정된 개체의 내용은 변경할 수 있습니다.
2. 메모리 할당의 관점에서 보면 프로그램은 포인터 변수에 메모리 영역을 할당하지만 참조에는 할당하지 않습니다. 참조가 이미 존재하는 개체를 가리키도록 선언되면 초기화되어야 하기 때문입니다. 참조는 null 값을 가리킬 수 없습니다.
3. 컴파일 관점에서 프로그램은 컴파일 중에 기호 테이블에 각각 포인터와 참조를 추가합니다. 심볼 테이블에서 해당 포인터 변수의 주소 값은 포인터 변수의 주소 값이고, 심볼 테이블에서 해당 참조의 주소 값은 참조되는 객체의 주소 값입니다.
기호 테이블은 생성된 후에 변경되지 않으므로 포인터가 가리키는 개체를 변경할 수 있지만(포인터 변수의 값은 변경 가능) 참조 개체는 변경할 수 없습니다. 이것이 포인터를 사용하는 것이 안전하지 않고 참조를 사용하는 것이 안전한 주된 이유입니다. 어떤 의미에서 참조는 변경할 수 없는 포인터로 생각할 수 있습니다.
4. null 값에 대한 참조가 없다는 사실은 참조를 사용하는 코드가 포인터를 사용하는 것보다 더 효율적이라는 것을 의미합니다. 참조를 사용하기 전에 참조의 유효성을 테스트할 필요가 없기 때문입니다. 반대로 포인터는 null이 되지 않도록 항상 테스트해야 합니다.
5. 이론적으로 포인터 수준 수에는 제한이 없지만 참조는 한 수준만 가능합니다. 다음과 같습니다:
int** p1; // 合法。指向指针的指针 int*& p2; // 合法。指向指针的引用 int&* p3; // 非法。指向引用的指针是非法的 int&& p4; // 非法。指向引用的引用是非法的
추천 튜토리얼:
PHP 비디오 튜토리얼위 내용은 PHP 참조와 포인터의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!