C언어 - 배열 & 포인터 (array & pointer)
안녕하세요 오늘은 배열과 포인터의 관계에 대해 알아보겠습니다.
아래 목차 순서대로 정리해볼게요~
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/005.gif)
1. 배열명으로 배열 요소를 사용하는 방법
2. 포인터를 배열명 처럼 사용하는 방법
1. 배열명으로 배열 요소를 사용하는 방법
먼저 알아야할 것은 배열명은 배열의 첫 번째 요소의 주소입니다.
#include <stdio.h>
int main(){
int arr[3] = {1,2,3};
printf("arr[0]'s address : %u\n", &arr[0]);
printf("arr's address : %u\n",arr);
return 0;
}
&arr[0] (arr배열의 첫 번째 요소의 주소 값)이 arr와 같은 것을 확인할 수 있었습니다.
이 말은 배열명이 첫 번째 요소의 주소 값과 같다는 것임을 알 수 있습니다.
자, 배열명이 배열의 첫 번째 요소의 주소임을 알았으므로 배열명으로 배열 요소를 접근해보겠습니다.
아래 코드는 배열명에 정수 연산을 통해 배열 요소를 사용해보는 예제입니다.
배열명을 통해 arr의 각 요소들에 새로운 값을 할당했습니다.
#include <stdio.h>
int main(){
int arr[3] = {1,2,3};
*(arr + 0) = 4;
*(arr + 1) = 5;
*(arr + 2) = *(arr + 0) + *(arr + 1);
printf("arr + 0 = %u\n", arr + 0 );
printf("arr + 1 = %u\n", arr + 1 );
printf("arr + 2 = %u\n\n", arr + 2 );
printf("arr[0]'s address : %u\n", &arr[0]);
printf("arr[1]'s address : %u\n", &arr[1]);
printf("arr[2]'s address : %u\n\n", &arr[2]);
printf("arr[0]'s value : %d\n", arr[0]);
printf("arr[1]'s value : %d\n", arr[1]);
printf("arr[2]'s value : %d\n", arr[2]);
return 0;
}
*(배열명 + 정수) = *(각 배열의 주소) = 배열명[인덱스]
(중요!!) 이때 배열명 즉 주소 값과 정수의 연산은 일반 정수와 정수 연산과 다릅니다.
아래 결과값에서 알 수 있듯이 arr+0 = 52, arr+1 = 56 arr+2 = 60입니다.
주소값과 연산되는 정수는 일반 정수라기보다 배열의 인덱스라고 생각하시면 됩니다.
2. 포인터를 배열명 처럼 사용하는 방법
parr 포인터가 arr 즉, arr 배열의 첫 번째 요소의 주소를 가리키게 하면
포인터를 통해서도 배열의 요소에 접근할 수 있겠죠?
#include <stdio.h>
int main(){
int arr[3] = {1,2,3};
int *parr = arr;
*parr = 4;
*(parr + 1) = 5;
parr[2] = parr[0] + parr[1];
printf("arr[0]'s value : %d\n", arr[0]);
printf("arr[1]'s value : %d\n", arr[1]);
printf("arr[2]'s value : %d\n\n", arr[2]);
printf("*(arr + 0) = %d\n", *(arr + 0));
printf("*(arr + 1) = %d\n", *(arr + 1));
printf("*(arr + 2) = %d\n\n", *(arr + 2));
printf("*(parr + 0) = %d\n", *(parr + 0));
printf("*(parr + 1) = %d\n", *(parr + 1));
printf("*(parr + 2) = %d\n\n", *(parr + 2));
printf("parr[0]'s value : %u\n", parr[0]);
printf("parr[1]'s value : %u\n", parr[1]);
printf("parr[2]'s value : %u\n\n", parr[2]);
return 0;
}
arr[0] = *(arr + 0) = *(parr + 0) = parr[0]
arr[0] : arr배열의 첫 번째 요소 값
*(arr + 0) : arr(배열의 주소 값) + 0 이 가리키는 값 -> arr배열의 첫 번째 요소 값
*(parr + 0) : parr은 arr와 같은 값 -> *(parr + 0)는arr의 첫 번째 요소 값
parr[0] : parr를 배열명(arr)처럼 사용 -> arr배열의 첫 번째 요소 값
오늘은 배열과 포인터의 관계에 대해 정리해봤습니다.
1. 배열명으로 배열 요소를 사용하는 방법
2. 포인터를 배열명 처럼 사용하는 방법
다음 포스팅으로는 변수의 종류 및 데이터 공유에 대해 알아보겠습니다.
감사합니다.
좋은 하루 보내세요~