본문 바로가기

BackEnd/C

다차원 배열 이름의 포인터형

반응형

1. 다차원 배열의 포인터형이란?


2차원 배열 이름의 포인터 형을 결정짓는 정보는 2가지이다.


- 배열 요소를 구성하는 변수의 자료형


- 배열의 가로길이


예를 들어 2차원 배열 double arr[4][5]의 배열 이름 arr과 동일한 포인터 형의 변수는 다음과 같이 선언된다.



2. 2차원 배열의 포인터형의 배경


앞서 1차원 배열의 포인터형과는 2차원 배열의 포인터형은 다른데 그 이유를 보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main(void)
{
    int arr1[3][2];
    int arr2[3][3];
    int arr3[3][4];
 
    printf("%d %d \n", arr1, arr1+1);
    printf("%d %d \n", arr2, arr2+1);
    printf("%d %d \n", arr3, arr3+1);
 
    return 0;
}
cs


1
2
3
6487600 6487608
6487552 6487564
6487504 6487520
cs


5~7행에 2차원 배열을 선언하고 있다. 그런데 가로의 길이가 각각 다르다.


그리고 9~10행에 배열 주소값에 +1을 증가시켜 값을 출력했다.


여기서 포인터형이 동일하면 덧셈 연산시 증가하는 값이 크기가 4로 동일해야하는데, 각각 8,12,16


이 증가했다. arr1,arr2,arr3의 포인터형이 서로 다르다는 것이다. 


즉 2차원 배열의 이름의 포인터 형은 1차원과는 다르게 배열 요소의 자료형이 동일해도 가로 길이


에 따라서 달라질 수 있다. 위에서 2차원 배열의 이름에 1을 더할때 반환되는 주소 값의 크기는 행


의 바이트 크기만큼 증가한다.



즉 다시 말하면 2차원 배열 이름의 포인터 형을 결정짓는 정보는 2가지이다


- 배열 요소를 구성하는 변수의 자료형


- 배열의 가로길이


3. 2차원 배열의 포인터형 예제


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
 
void InitArrWD3(int (*ar)[3], int height, int initNum)
{
    int i, j;
    for(i=0; i<height; i++)
        for(j=0; j<3; j++)
            ar[i][j]=initNum;
}
 
void InitArrWD4(int (*ar)[4], int height, int initNum)
{
    int i, j;
    for(i=0; i<height; i++)
        for(j=0; j<4; j++)
            ar[i][j]=initNum;
}
 
int main(void)
{
    int i, j;
    int arr1[3][3];
    int arr2[4][4];
 
    int (* pArr1)[3]=arr1;
    int (* pArr2)[4]=arr2;
 
    InitArrWD3(arr1, 35);
    InitArrWD4(arr2, 47);
 
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
            printf("%4d", pArr1[i][j]);
 
        printf("\n");
    }
 
    printf("\n");
 
    for(i=0; i<4; i++)
    {
        for(j=0; j<4; j++)
            printf("%4d", pArr2[i][j]);
 
        printf("\n");
    }
 
    return 0;
}
cs


1
2
3
4
5
6
7
8
   5   5   5
   5   5   5
   5   5   5
 
   7   7   7   7
   7   7   7   7
   7   7   7   7
   7   7   7   7
cs


22~23행: 두개의 배열이 선언되었다. 배열 요소의 자료형은 같으나, 가로 길이가 달라 포인터형이 다르다.


25~26행: 다차원 배열 포인터 형의 변수를 각각 선언하고 있다. 각각은 포인터형이 다르다.


34,44행 : 2차원 배열을 가리키는 포인터 변수의 이름을 이용해서 배열 방식으로 접그하는 것을 보여준다.


3행,11행: 함수의 첫번째 매개변수를 각각 int ar[ ][3], int ar[ ][4]와 같이 선언해도 된다.



반응형