반응형
C언어 2차원 배열 포인터 연산 쉽게 이해하기: 코드 해설 👨💻
안녕하세요! 오늘은 C언어에서 2차원 배열을 포인터를 이용하여 접근하는 방법에 대해 자세히 알아보겠습니다. 특히, 코드를 쉽게 이해할 수 있도록 단계별로 해설해 드릴게요. 아래 코드를 함께 살펴보면서 2차원 배열의 포인터 연산에 대한 이해도를 높여 보세요.
int main() {
int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int sum1, sum2;
sum1 = *(*arr + 1) + *(*arr + 2);
sum2 = *arr[1] + *arr[2];
printf("%d,%d", sum1, sum2);
}
1. 2차원 배열 선언 및 초기화
int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
arr[3][3]
는 3행 3열의 2차원 배열을 선언합니다. 즉, 총 9개의 정수를 저장할 수 있는 공간이 생성됩니다.{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
는 각 행에 대한 초기값을 지정합니다. 즉, 배열의 첫 번째 행에는 1, 2, 3이, 두 번째 행에는 4, 5, 6, 세 번째 행에는 7, 8, 9가 저장됩니다.
2. 변수 선언
int sum1, sum2;
sum1
과sum2
는 합계를 저장할 정수형 변수를 선언합니다.
3. sum1
계산: 포인터 연산 활용
sum1 = *(*arr + 1) + *(*arr + 2);
*arr
는arr
배열의 시작 주소를 나타냅니다. 즉,arr[0][0]
의 주소를 가리킵니다.*arr + 1
은arr[0][0]
의 주소에서 1만큼 이동한 주소, 즉arr[0][1]
의 주소를 가리킵니다. (포인터 연산에서는 주소 값에 1을 더하면 다음 원소의 주소를 가리킵니다.)*(*arr + 1)
은arr[0][1]
의 값을 의미합니다.*arr + 2
는arr[0][0]
의 주소에서 2만큼 이동한 주소, 즉arr[0][2]
의 주소를 가리킵니다.*(*arr + 2)
은arr[0][2]
의 값을 의미합니다.- 따라서
sum1
은arr[0][1]
과arr[0][2]
의 값을 더한 값이 됩니다.
4. sum2
계산: 배열 인덱스 활용
sum2 = *arr[1] + *arr[2];
arr[1]
은arr
배열의 두 번째 행의 시작 주소를 나타냅니다. 즉,arr[1][0]
의 주소를 가리킵니다.*arr[1]
은arr[1][0]
의 값을 의미합니다.*arr[2]
는arr[2][0]
의 값을 의미합니다.- 따라서
sum2
는arr[1][0]
과arr[2][0]
의 값을 더한 값이 됩니다.
5. 결과 출력
printf("%d,%d", sum1, sum2);
printf()
함수를 이용하여sum1
과sum2
의 값을 출력합니다.
결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
5,11
요약
- C언어에서 2차원 배열을 포인터를 이용하여 접근하는 방법은 다양합니다.
- 포인터 연산을 이용하면 배열의 각 원소에 대한 주소를 직접 조작하여 원하는 값에 접근할 수 있습니다.
*
연산자는 포인터가 가리키는 메모리 위치에 저장된 값을 가져오는 역할을 합니다.
추가 정보
- 2차원 배열을 포인터를 이용하여 접근하는 방법에 대해 더 자세히 알아보려면 C언어 포인터 관련 자료를 참고하세요.
- 포인터 연산은 메모리 관리 및 효율적인 데이터 접근에 중요한 역할을 합니다.
이 글이 C언어 2차원 배열 포인터 연산을 이해하는 데 도움이 되셨기를 바랍니다. 🙂
반응형
댓글