Language/C++
[C++] 포인터와 배열의 차이
마탁이
2020. 12. 15. 16:18
1. 포인터는 변수이지만 배열은 상수이다.
- 포인터는 고유의 메모리를 차지하고 있어 다른 대상을 가리킬 수 있다.
- 배열은 선언시 그 위치가 고정되므로 다른 대상을 가리킬 수 없다.
- 배열은 오로지 선두 번지를 읽을 수 있을 뿐이다.
2. 포인터가 가리키는 배열의 크기는 동적으로 결정할 수 있지만,
배열이 가리키는 배열의 크기는 선언할 때 정적으로 결정된다.
- 포인터로 할당한 배열은 실행 중에라도 realloc()으로 크기를 재할당할 수 있다.
3. 포인터는 대상체가 무엇이든 4 byte의 크기를 차지하므로 함수를 전달할 수 있지만,
배열은 그 자체가 크기 때문에 함수의 인수로 전달할 수 없다.
- 따라서 배열을 함수로 전달할 때는 반드시 포인터를 사용해야한다.
4. 배열로 요소를 읽는 것과 포인터로 대상체를 읽는 동작의 속도 차이가 있다.
- 배열의 첨자 연산은 매번 배열 선두에서 시작하지만,
포인터는 대상체로 직접 이동해서 읽을 수 있으므로 빠르다.
- 포인터가 *pi 라고 하면 pi가 가리키는 곳을 바로 읽지만,
배열 ar[n] 은 *(ar+n)으로 일단 번지를 더한 후 읽어야 하므로 속도가 조금 느리다.