포인터와 배열의 관계

NOAH·2021년 2월 22일
0

1차원 int 형 배열에 대해 생각해보자.

int arr[3] ; // 이 배열의 이름도 사실 포인터이다. 

와 같은 길이가 3인 배열을 선언했을때,

배열의 이름 arr은 포인터 변수와 똑같은 역할을 한다. 물론 int * arr 로 선언을 해야 포인터이지만, 배열은 그렇게 선언을 하지 않아도 포인터이다.

arr은 배열의 첫번째 요소(=0번째 인덱스)를 가리키는 포인터이다.
다만 상수(const)로 가리키는 대상은 바꿀 수 없는 '상수 포인터'
이다.

int main(void)
{

	
    int arr[3] = {10, 20, 30} ;
    int *ptr = &arr[0]; // 
    
    printf("%d %d \m", ptr[0], arr[0]);
    printf("%d %d \m", ptr[1], arr[1]);
    printf("%d %d \m", ptr[2], arr[2]);
    
    return 0;
}

10 10
20 20
30 30

arr 은 int 형 포인터이니 int 포인터를 대상으로 배열접근을 위한 index 연산을 진행할 수 있다. 실제로 포인터 변수 ptr을 대상으로 각 인덱스 ptr[0], ptr[1] ptr[2]와 같은 방식으로 메모리에 접근이 가능하다.

결론 : (int *ptr = &arr[0]) == arr

배열의 이름은 0번째 인덱스를 가리키는 포인터이다. 다만, 변경 불가능한 상수다.

0개의 댓글