포인터와 참조의 차이점 | 포인터 대 참조

Anonim

주요 차이점 - 포인터와 참조

포인터와 참조의 차이점을 설명하기 전에이 두 용어의 의미를 간단히 살펴 보겠습니다. 프로그램에서 데이터는 메모리를 차지합니다. 실행 시간에 데이터가 배치 된 메모리의 정확한 위치를 알고 있어야 액세스 할 수 있습니다. 포인터 변수참조 변수 는이 데이터에 액세스하고 그들이 사용하는 메모리 주소를 조작하는 데 사용됩니다. 즉, 포인터와 참조를 모두 사용하여 객체를 간접적으로 참조 할 수 있습니다. 기본적으로 메모리 주소를 값으로 유지합니다. 포인터와 참조 사이의 키 차이포인터가 다른 변수 의 메모리 위치 주소를 저장하는 변수이고 참조는 다른 변수로. 포인터 와 참조는 두 가지 메커니즘과 구문이 다르다 .

포인터 란 무엇입니까?

포인터는 계산 메모리에

값의 메모리 주소를 저장하는 프로그래밍 언어 객체입니다. C ++ 구문에서; int i = 5;

int * ptr = & i;

첫 번째 행은 값 5로 초기화 된 변수를 정의합니다. 두 번째 행은 변수의 메모리 주소에 대한 포인터를 정의합니다. 여기서 'ptr'은 초기 값이 객체 i의 주소 인 'int to pointer'유형의 객체로 선언됩니다. 기본적으로 ptr 변수는 메모리 주소를 저장하여 i를 가리 킵니다.

메모리 위치에 저장된 값을 얻는 것을

역 참조 (dereferencing)

라고합니다. * 연산자는 포인터를 역 참조하기 위해 사용됩니다. 선언이 완료된 후에 간접적 인 표현 * ptr은 ptr을 참조하여 i를 참조합니다. i 값을 변경하기 위해 다음과 같은 할당을 사용할 수 있습니다. * ptr = 20;

포인터는 다른 객체를 참조하기 위해 재 할당 될 수 있습니다.

- 9 ->

A

널 포인터

는 특별한 유형의 포인터입니다. null 포인터는 종종 0 또는 null로 표시되며 아무 것도 가리 키지 않습니다. 정확한 주소를 포인터에 할당하지 않은 경우에는 널 포인터를 사용하는 것이 좋습니다. 이 지정은 논리 연산 및 조건에서 사용될 수 있습니다. 동적으로 할당 된 메모리의 주소를 저장하고 관리하기 위해 포인터를 사용할 수 있습니다. 스택, 큐 및 목록과 같은 데이터 구조의 구현 및 제어는 포인터를 사용하여 효율적으로 수행 할 수 있습니다. 예를 들어, 대기열에는 두 개의 포인터가있을 수 있습니다. 머리 포인터와 꼬리 포인터.또한 주소를 사용하여 값을 전달할 수있는 포인터를 사용하여 값을 변경할 수 있습니다. 메모리 또는 메모리 매핑 장치를 직접 조작하는 것은 포인터를 사용하여 처리 할 수도 있습니다. 포인터는 보호 된 메모리에 대한 보호 및 비보호 액세스를 모두 허용합니다. 따라서 포인터의 내용이 유효한지 확인하기 위해 필요한 예방 조치를 취해야합니다. 그렇지 않으면 잘못된 메모리 주소로 포인터를 역 참조하면 프로그램이 중단 될 수 있습니다.

포인터는 C, C ++, 파스칼 및 많은 어셈블리 언어와 같은 언어로 지원됩니다. 변수 b와 연관된 메모리 주소를 가리키는 포인터

a

b.

참조 란 무엇입니까? 참조는 단순히 메모리 에 저장된 값에 대한 대체 식별자입니다. 이것은 프로그램이 특정 데이텀에 간접적으로 액세스 할 수있게합니다.

C ++ 구문에서;

int i = 5; int 및 ref = i;

첫 번째 행은 값이 5로 초기화 된 변수를 정의합니다. 두 번째 행은 'ref'를 'int to reference'유형의 객체로 선언합니다.이 객체는 i를 참조합니다. 참조는 메모리에 저장된 특정 데이텀의 실제 주소로 구현된다는 점에서 데이터 자체와 다릅니다.

일단 정의되면, 참조는 새로운 값으로 재 할당 될 수 없다. 참조는 항상 초기화 된 객체를 참조합니다. 다음 과제에서 ref는 여전히 i를 참조하지만 값은 20입니다.

ref = 20; 위의 예에 따르면 참조 역 참조에는 연산자가 필요하지 않습니다.

변수는 항상 객체를 참조 할 때 참조를 사용할 수 있습니다. 이는 포인터와 달리 참조가 null 일 수 없으며 초기화시 항상 할당되어야하기 때문입니다. 참조는 항상 어떤 객체를 참조해야하므로 이러한 변수를 참조로 만드는 것은 프로그램이 효율적이고 올바르게 작동하도록합니다. 이 경우 null 참조가 없으므로 참조 변수의 유효성을 테스트 할 필요가 없습니다.

참조 변수는 큰 데이터를 프로 시저에 인수로 효율적으로 전달하는 데 사용됩니다.

참조는 각 코드가 데이터에 대한 참조를 유지하므로 서로 다른 코드 영역간에 큰 데이터를 공유하는 데에도 사용됩니다.

C ++, Java, Python, Perl, PHP, Ruby 등의 프로그래밍 언어는 참조를 지원합니다.

포인터와 참조의 차이점은 무엇입니까?

포인터와 참조의 정의 포인터: 포인터는 계산 메모리에 저장된 객체의 메모리 주소이다.

참조:

참조는 객체의 대체 식별자 또는 별칭입니다.

포인터와 참조의 특성

선언 포인터:

포인터는 * 연산자로 선언됩니다. 참조:

참조는 & 연산자로 선언됩니다.

역 참조

포인터: 포인터 변수는 * 연산자를 참조 해제해야합니다.

참조: 참조 변수에는 연산자를 참조 해제 할 필요가 없습니다.

포인터 초기화:

포인터는 null로 초기화 될 수 있습니다.이러한 변수를 널 포인터라고합니다. 참조:

참조를 null로 초기화 할 수 없습니다. null 참조 같은 것은 없습니다. 참조는 항상 객체를 참조해야합니다. 재 할당

포인터:

포인터 변수는 다른 객체를 참조하기 위해 재 할당 될 수 있습니다. 참조:

참조 변수를 재 할당 할 수 없습니다. 항상 초기화 된 객체를 참조합니다. 사용법

포인터:

포인터 변수는 아무 것도 가리킬 가능성이 없거나 다른 시점에 다른 것을 참조해야 할 때 사용해야한다. 참조: 참조 변수는 참조 할 객체가 항상 있고 참조 변수를 사용하여 그 객체 이외의 다른 참조를 사용할 필요가없는 경우에 사용되어야합니다.

용도의 적용 포인터:

포인터 변수는 알고리즘과 데이터 구조를 구현하는데 사용될 수있다.

참조: 참조 변수는 함수 매개 변수에서 사용될 수 있고 반환 유형은 유용한 인터페이스를 정의합니다.

사용 언어: 포인터:

C, C ++, 파스칼 및 많은 어셈블리 언어와 같은 프로그래밍 언어가 포인터를 지원합니다.

참조: C ++, Java, Python, Perl, PHP, Ruby 등과 같은 프로그래밍 언어는 참조를 지원합니다.

이미지 제공: "포인터"이 파일의 사용자: SvenTranslation에 의해 작성되었습니다. 자기 일. 이 벡터 이미지는 잉크 스케이프로 만들었습니다. Commons를 통해 (CC BY-SA 3.0) -