1. 아래 코드는 1부터 100까지의 수를  입력/출력 하는 기능을 예이다. 코드와 메모리 구조를  보고 문제에 답하시오. 

코드

  • 10개의 정수를 입력하는 메모리 10개를 정의하여 2차원 배열을 구현하였다.
  • 메모리 접근 코드를 배열로 작성하였다. 
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int **arr = (int **)malloc(sizeof(int *) * 10);
    if(arr == NULL) return 1;

    for(int i = 0; i < 10; i++) {
        arr[i] = (int *)malloc(sizeof(int) * 10);
        if(arr[i] == NULL)  return 1;
    }

    int num = 1;
    for(int i = 0; i < 10; i++) {
        for(int j = 0; j < 10; j++) {
            arr[i][j] = num++;
        }
    }

    for(int i = 0; i < 10; i++) {
        for(int j = 0; j < 10; j++) {
            printf("%3d ", arr[i][j]);
        }
        printf("\n");
    }

    for(int i = 0; i < 10; i++)
        free(arr[i]);

    free(arr);
    return 0;
}

 

메모리 구조

1-1. arr[0][0]을 포인터 변수를 이용하여 출력하시오. 

printf("%d\n", ________);
 

1-2. arr[1][0]을 포인터 변수를 이용하여 출력하시오.  .

printf("%d\n", ________);

 

1-3 arr[2][4]를  포인터 변수를 이용하여 출력하시오. 

printf("%d\n", ________);
 

1-4 arr[9][9]를 포인터 변수를 이용하여 출력하시오. 

printf("%d\n", ________);
 

1-5. arr[0][0]의 값을 포인터 변수를 이용하여  999로 변경하시오.

________ = 999;
 

1-6  arr[1][2]의 값을 포인터 변수를 이용하여 777로 변경하시오.

________ = 777;
 

1-7. arr[3]이 가리키는 행의 시작 주소를 포인터 변수를 이용하여 출력하시오.

printf("%p\n", ________);

 

1-8 arr[2][5]의 주소를 포인터 변수를 이용하여 출력하시오.

printf("%p\n", ________);
 

1-9  다음 코드에서 arr + 4는 무엇을 가리키는가?

arr + 4
 

보기:

① arr[4][0]의 값
② arr[4]의 주소를 저장하는 공간
③ 5번째 행의 시작 주소
④ arr[0][4]의 주소
 

1-10 다음 배열 표현을 포인터 표현으로 바꾸시오.

arr[i][j]
 

 

________
 
 
풀이

 

더보기

1. *(*(arr + 0) + 0)

2. *(*(arr + 1) + 0)

3. *(*(arr + 2) + 4)

4. *(*(arr + 9) + 9)

5. *(*(arr + 0) + 0) = 999;

6. *(*(arr + 1) + 2) = 777;

7. *(arr + 3)

8. (*(arr + 2) + 5)

9. ② arr[4]의 주소를 저장하는 공간
   단, *(arr + 4)는 5번째 행의 시작 주소

10. *(*(arr + i) + j)

 

 

정리하면, arr[i][j] == *(*(arr + i) + j)

+ Recent posts