Nagie's DevStory

[C] 25.배열과 포인터 ( 4 ) 본문

Programming/C

[C] 25.배열과 포인터 ( 4 )

Nagie 2023. 9. 24. 22:31
728x90

배열을 설명하다 갑자기 포인터 설명을 해서 조금 난감할 수도 있지만.

배열과 포인터는 상당히 밀접한 관계를 맺고 있다.

 

배열은 연속된 메모리공간을 가진다. 그렇다면 배열명이 가지는 의미가 무엇인지 생각해 봐야 한다.

 

배열명의 의미는 해당 배열의 첫 번째 원소의 메모리 주소를 의미한다.

 

MyArr[5]의 배열이 있다고 가정한다면 MyArr은 &MyArr[0]과 같은 의미라는 것이다.

 

int MyArr[3] = { 1,2,3 };

 

그렇다면 위의 MyArr[0]의 값을 출력하려면 

 

int MyArr[3] = { 1,2,3 };

printf_s("%d\n",MyArr[0]);

 

대신 

 

int MyArr[3] = { 1,2,3 };

printf_s("%d\n",*MyArr);

 

도 사용가능하다는 의미다.

 

그리고 배열은 연속적인 메모리 공간을 사용한다고 했으니 포인터 변수에서 주솟값을 1(자료형의 크기)씩 더해준다면 

아래의 코드처럼 다른 원소에도 접근이 가능하다.

 

//pointer arithmetic
int MyArr[3] = { 1,2,3 };

printf_s("%d\n",*(MyArr + 1));

 

 

즉 MyArr[n] 접근 방식과 *(MyArr + n)의 접근 방식은 표현이 다를 뿐 동일하다는 이야기다.

 

이걸 포인터 산술 연산(Pointer Arithmetic)이라고 부른다.

728x90
Comments