포인터와 배열 · 2 min read · Nov 18, 2025
리눅스 C 프로그래밍 튜토리얼 19부: 포인터와 배열

지금까지 진행된 이 C 프로그래밍 튜토리얼 시리즈에서는 포인터의 기본 개념에 대해 간략하게 논의했습니다. 그러나 논의해야 할 여러 포인터 관련 개념이 더 있습니다. 그래서 이번 튜토리얼에서는 포인터와 배열의 개념에 대해 논의하겠습니다.
포인터와 배열에 대해 시작하기 전에, 포인터 자체의 기본 개념을 빠르게 복습해 보겠습니다. 포인터는 주소를 저장할 수 있는 특별한 종류의 변수입니다. 예를 들어, 문자에 대한 포인터 ‘ptr’는 다음과 같이 선언할 수 있습니다;
char *ptr;그리고 앰퍼샌드 기호를 사용하여 주소를 저장할 수 있습니다. 다음은 예입니다:
char c = 'a';
ptr = &c;이제 포인터 ‘ptr’는 변수 ‘c’의 주소를 포함하고 있습니다. 또는 ‘ptr’가 이제 변수 ‘c’를 가리킨다고도 말할 수 있습니다.
포인터가 가리키는 변수의 값을 접근하거나 조작하려면 * 연산자를 사용할 수 있습니다. 예를 들어, 변수 c의 값을 ‘a’에서 ‘b’로 변경하려면 다음과 같이 포인터 ‘ptr’를 사용할 수 있습니다:
*ptr = 'b';다음 프로그램은 지금까지 논의한 기본 포인터 개념에 대한 더 나은 아이디어를 제공할 것입니다:
#include
int main()
{
char c = 'a';
char *ptr = &c;
*ptr = 'b';
printf ("변수 c = %c", c);
return 0;
} 이 프로그램의 출력은 다음과 같습니다:
변수 c = b따라서 포인터를 사용하여 변수의 값이 변경된 것을 볼 수 있습니다.
포인터와 배열
C 코드를 작성하고 읽는 데 더 많은 시간을 보내게 되면 포인터와 배열이 함께 사용되는 경우가 많다는 것을 알게 될 것입니다. 예를 들어, 포인터를 사용하여 배열의 개별 요소에 접근할 수 있습니다. 다음 코드 조각을 고려해 보십시오:
...
...
...
char arr[] = {'a','b','c','d','e'}
char *ptr;
ptr = &arr[0]
...
...
...여기서 포인터 ‘ptr’는 배열 ‘arr’의 첫 번째 요소를 가리키며, 인덱스 관점에서 보면 배열의 위치 0에 있습니다. 이제 ‘ptr’와 함께 * 연산자를 사용하여 포인터가 가리키는 값을 접근하거나 조작할 수 있습니다.
계속해서, 배열의 첫 번째 요소를 가리키는 포인터가 있으면 배열의 다른 요소에도 쉽게 접근할 수 있습니다. 예를 들어, 위 코드 조각의 맥락에서 다음 표현식을 어디에서나 사용하면:
*(ptr+1)배열의 두 번째 요소에 접근할 수 있습니다. 일반적으로 다음과 같은 방법으로 사용합니다:
arr[1] 따라서 효과적으로 ‘ptr’에 1을 더하면 배열의 다음 요소의 주소로 이동하고, *를 사용하여 해당 주소에 저장된 값을 접근할 수 있습니다. 마찬가지로 2를 더하면 세 번째 요소로 이동합니다 … 계속해서.
다음 프로그램은 우리가 방금 논의한 내용을 더 명확하게 이해하는 데 도움이 될 것입니다:
#include
int main()
{
char arr[] = {'a','b','c','d','e'};
char *ptr = &arr[0];
for(int i=0;i 그리고 출력은 다음과 같습니다:
arr[0]는 a입니다
arr[1]는 b입니다
arr[2]는 c입니다
arr[3]는 d입니다
arr[4]는 e입니다따라서 ‘*(ptr+i)’ 표현식 - i가 0에서 배열의 마지막 인덱스까지 변하는 경우 -를 사용하여 배열의 모든 요소에 접근할 수 있음을 알 수 있습니다.
참고 1: 코드에서 사용될 때 배열의 이름은 배열의 기본 주소를 제공합니다. 즉, 배열의 이름과 첫 번째 요소의 주소는 동일한 것입니다. 따라서 배열 ‘arr’의 맥락에서 ‘&arr[0]’과 ‘arr’은 동일합니다. 이는 다른 요소에도 확장되며, &arr[2]는 (arr+2)로도 쓸 수 있습니다.
참고 2: 위의 참고 사항을 확장하면, 모든 배열 요소 표현은 포인터 표현으로 분해될 수 있습니다. 예를 들어: arr[2]는 ‘*(arr + 2)’와 동일합니다.
참고 3: 배열 주소를 포인터에 할당할 수 있지만, 그 반대는 유효하지 않습니다. 또한 포인터와 달리 배열 이름에 ++ 또는 – 연산자를 사용할 수 없습니다. 일반적으로 배열 요소가 원래 위치한 주소를 변경할 수 없습니다.
결론
이번 튜토리얼은 포인터와 배열의 개념, 이들이 어떻게 관련되어 있는지, 그리고 포인터를 통해 배열 요소에 접근하는 방법에 초점을 맞췄습니다. 마지막으로 포인터를 배열에 활용하는 코드와 관련된 몇 가지 중요한 사항도 논의했습니다.
이 개념들을 로컬 머신에서 시도해 보시고, 이러한 것들이 어떻게 작동하는지에 대한 더 나은 아이디어를 얻으시기 바랍니다. 의문이나 질문이 있는 경우 아래에 댓글을 남겨주세요.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.