본문 바로가기
카테고리 없음

C언어 2차원 배열 포인터 연산 쉽게 이해하기: 코드 해설

by 화풍 2024. 8. 22.
반응형

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;
  • sum1sum2는 합계를 저장할 정수형 변수를 선언합니다.

3. sum1 계산: 포인터 연산 활용

   sum1 = *(*arr + 1) + *(*arr + 2);
  • *arrarr 배열의 시작 주소를 나타냅니다. 즉, arr[0][0]의 주소를 가리킵니다.
  • *arr + 1arr[0][0]의 주소에서 1만큼 이동한 주소, 즉 arr[0][1]의 주소를 가리킵니다. (포인터 연산에서는 주소 값에 1을 더하면 다음 원소의 주소를 가리킵니다.)
  • *(*arr + 1)arr[0][1]의 값을 의미합니다.
  • *arr + 2arr[0][0]의 주소에서 2만큼 이동한 주소, 즉 arr[0][2]의 주소를 가리킵니다.
  • *(*arr + 2)arr[0][2]의 값을 의미합니다.
  • 따라서 sum1arr[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]의 값을 의미합니다.
  • 따라서 sum2arr[1][0]arr[2][0]의 값을 더한 값이 됩니다.

5. 결과 출력

   printf("%d,%d", sum1, sum2);
  • printf() 함수를 이용하여 sum1sum2의 값을 출력합니다.

결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

5,11

요약

  • C언어에서 2차원 배열을 포인터를 이용하여 접근하는 방법은 다양합니다.
  • 포인터 연산을 이용하면 배열의 각 원소에 대한 주소를 직접 조작하여 원하는 값에 접근할 수 있습니다.
  • * 연산자는 포인터가 가리키는 메모리 위치에 저장된 값을 가져오는 역할을 합니다.

추가 정보

  • 2차원 배열을 포인터를 이용하여 접근하는 방법에 대해 더 자세히 알아보려면 C언어 포인터 관련 자료를 참고하세요.
  • 포인터 연산은 메모리 관리 및 효율적인 데이터 접근에 중요한 역할을 합니다.

이 글이 C언어 2차원 배열 포인터 연산을 이해하는 데 도움이 되셨기를 바랍니다. 🙂

반응형

댓글