Language/C++

[C++] 포인터와 배열의 차이

마탁이 2020. 12. 15. 16:18

1. 포인터는 변수이지만 배열은 상수이다.

  - 포인터는 고유의 메모리를 차지하고 있어 다른 대상을 가리킬 수 있다.

  - 배열은 선언시 그 위치가 고정되므로 다른 대상을 가리킬 수 없다.

  - 배열은 오로지 선두 번지를 읽을 수 있을 뿐이다.

 

2. 포인터가 가리키는 배열의 크기는 동적으로 결정할 수 있지만,

   배열이 가리키는 배열의 크기는 선언할 때 정적으로 결정된다.

  - 포인터로 할당한 배열은 실행 중에라도 realloc()으로 크기를 재할당할 수 있다.

 

3. 포인터는 대상체가 무엇이든 4 byte의 크기를 차지하므로 함수를 전달할 수 있지만,

   배열은 그 자체가 크기 때문에 함수의 인수로 전달할 수 없다.

  - 따라서 배열을 함수로 전달할 때는 반드시 포인터를 사용해야한다.

 

4. 배열로 요소를 읽는 것과 포인터로 대상체를 읽는 동작의 속도 차이가 있다.

  - 배열의 첨자 연산은 매번 배열 선두에서 시작하지만,

    포인터는 대상체로 직접 이동해서 읽을 수 있으므로 빠르다.

  - 포인터가 *pi 라고 하면 pi가 가리키는 곳을 바로 읽지만, 

    배열 ar[n] 은 *(ar+n)으로 일단 번지를 더한 후 읽어야 하므로 속도가 조금 느리다.