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차원 배열의 주소 값을 저장할 수 있는 "더블 포인터" 이다.