안녕하세요 2차원 배열 동적할당하기 3편입니다.
2편에서는 1차 배열을 2차 배열처럼 표현하였는데 단점으로 배열 사용할 때 인덱스가 복잡하여 사용하기 어려웠습니다.
이제는 1편의 2차 배열을 조금 정리하여 이쁘게 표현해보도록 하겠습니다.
int** mat;
mat = (int**)malloc(sizeof(int*) * column);
mat[0] = (int*)malloc(sizeof(int) * row *column);
for (int i = 1; i < column; i++) {
mat[i] = mat[i - 1] + row;
}
이제 포인터 한 번 찍어보도록 하겠습니다.
이렇게 표현하면 그냥 배열처럼 사용할 수 있습니다.
for (int i = 0; i < column; i++)
{
for (int j = 0; j < row; j++) {
printf("%d ", &mat[i][j]);
}
printf("\n");
}
5 x 5 행렬도 찍어보겠습니다.
메모리를 찍어보니 끊어지지 않고 4바이트(sizeof(int))만큼 증가하는걸 볼 수 있습니다.
메모리를 사용했으니 이제 제자리에 돌려놔야겠죠?? 메모리 할당은 조금 복잡하나 해제는 아주 간단합니다.
free(mat[0]);
free(mat);
속도도 1편보다 빠릅니다. (사람 눈에는 차이가 없습니다. 워낙 빨라서...)
저는 전공이 하드웨어나 영상처리 쪽이 아니기 때문에 C를 많이 사용하지 않습니다. 당연히 요즘은 파이썬...
1학년 때 처음 배운게 C언어였고, 이제 4학년부터는 AVR을 공부하고 캡스톤을 준비해야 하니,
예전에 제가 배웠던 혹은 중요하게 생각하는 부분, 글쓰기를 계속해 나가도록 하겠습니다.
'C, C++' 카테고리의 다른 글
[C]BMP구조체 : #pragma pack(push, 1) 사용하지 않고 정렬하기 (0) | 2020.02.18 |
---|---|
[C]BMP RGB 값 조절 (0) | 2020.01.29 |
2차원 배열 동적할당하기 2편 (0) | 2020.01.23 |
2차원 배열 동적 할당하기 1편 (0) | 2020.01.22 |
[C]행렬식 N X N : 삼각행렬 활용 (0) | 2020.01.20 |