Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
05-15 13:20
관리 메뉴

nomad-programmer

[C] 2차원 배열의 주소 값을 저장할 수 있는 포인터 본문

Programming/C

[C] 2차원 배열의 주소 값을 저장할 수 있는 포인터

scii 2020. 6. 10. 21:04
#include <stdio.h>

int main(void) {
    char data[3][5] = { {0,}, {0,}, {0,} };
    // 2차원 배열의 주소를 저장할 수 있는 포인터
    char (*ptr)[5] = data;
    /* char형 주소값 2개를 저장할 수 있는 배열 */
    // char* ptr2[2] = { &data[0][0], &data[1][2] };
    // 위의 코드와 같은 초기화 선언이다.
    char* ptr2[2] = { &(*(*(data+0)+0)), &(*(*(data+1)+2)) };

    // data[1][1]에 5저장
    (*(ptr+1))[1] = 5;
    // data[2][0]에 77저장
    ptr[2][0] = 77;
    // data[2][1]에 99저장
    *(*(ptr + 2) + 1) = 99;

    // ptr[0][0]에 55저장
    *(ptr2[0]) = 55;
    // ptr[2][1]에 100저장
    *(*(ptr2+1)) = 100;

    for (int i = 0; i < 15; i++) {
        printf("%d ", data[i / 5][i % 5]);
        if (!((i+1) % 5)) {
            puts("");
        }
    }

    return 0;
}

// 결과
/*

55  0   0   0   0
0   5 100   0   0
77  99  0   0   0

*/

1) char형 주소를 저장할 수 있는 배열의 선언.

char * ptr[3];

2) char형 2차원 배열의 주소를 저장할 수 있는 포인터.

char (*ptr)[3];

 

언뜻 보면, 서로 상당히 유사하다. 하지만 그 의미는 완전히 다르다.

1번째는 char형의 주소 값 3개를 저장할 수 있는 "포인터 배열" 이다.

2번째는 char형 데이터를 저장할 수 있는 열(row)의 크기가 3인 2차원 배열의 주소 값을 저장할 수 있는 "더블 포인터" 이다.

Comments