63.7 삼중 포인터는 왜 필요할까요?
, Lee Seok님이 작성main 함수에 short 2중 포인터를 선언한 이유가 있을까요? void allocMatrix함수에서는 3중 포인터가 쓰인 이유가 궁금합니다. 배열이라서 그런건지, 굉장히 햇갈리네요
void allocMatrix(void ***ptr, int m, int n, int elementSize)
{
*ptr = malloc(sizeof(void *)*m);
for (int i = 0; i < m; i++)
{
(*ptr)[i] = malloc(elementSize*n);
}
}
int main()
{
short **matrix;
allocMatrix(&matrix, 3, 3, sizeof(short));
matrix[0][2] = 10;
matrix[1][1] = 20;
printf("%d %d\n", matrix[0][2], matrix[1][1]);
freeMatrix(&matrix, 3);
return 0;
}
Re: 63.7 삼중 포인터는 왜 필요할까요?
, 도장_ 관리자님이 작성배열의 []는 C 언어 내부적으로 *로 변환됩니다.
자세한 내용은 이전 답변을 참고하세요.
https://dojang.io/mod/forum/discuss.php?d=699&parent=1577
2차원 배열은 **이고, 2차원 배열을 주소로 전달하고 싶다면 ***이 됩니다.
3차원 배열은 ***이고, 3차원 배열을 주소로 전달하고 싶다면 ****이 됩니다.
실무에서 ***이나 ****이 잘 안 보이는 이유는 ADT(Abstract Data Type, 데이터 추상화)를 사용하기 때문입니다.
typedef double 3dmatrix[30][30][20];
3dmatrix m; // ***
3dmatrix *ptr = &m; // ****
실제로는 이렇게 추상화해서 쓰기 때문에 3차원 배열에 대한 4중 포인터가 단일 포인터로 보일 뿐입니다.
prop_type ***proptable;
...
prop_type prop = proptable[c>>14][c>>7&0x7f][c&0x7f];
유니코드에서는 이렇게 문자 테이블을 씁니다.
다단 테이블을 쓰면 1차, 2차에 속하는 데이터 전체를 선택할 수 있습니다.