이번엔 홍보먼저....... ^^
## 홍보 :
http://chanywa.com
여기서의 문제는 배열을 넘길때 그 사이즈를 알 수가 없다는 것입니다.
즉, 변수의 포인터 값을 1씩 증가시킬때 마다 그 변하는 단위가 일정합니다.
char형 포인터는 1씩, int 형은 2 혹은 4씩......
일차원 배열일 경우에는 그것이 캐스트 (형 타입)에 따라서 알수가 있지만,
이차원 이상일 경우에는 한개의 단위가 얼마인지를 바로 알 수가 없습니다.
즉 int a[] 라고 한다면, a++ 했을때 증가하는 것이 int 크기만큼 포인터 이동이 되지만
int a[][] 라고 했을 경우에 a++은 int 크기만큼이 아니라 a[] 크기만큼인 셈입니다.
따라서 크기가 불명확하기때문에 포인터랑 캐스팅이 제대로 이루어지지 않아서 그런 문제가 발생한 겁니다.
제가 간단한 예제를 만들어봤습니다.
이 두개 예제를 보시면 알 수 있습니다.
한개는 배열을 그대로 사용한 것이고, 다른 한개는 포인터로 받아서 포인터를 이용한 것입니다.
void b(int a[3][3])
{
int i, j;
for(i=0 ; i<3 ; i++)
for(j=0; j<3; j++)
printf("%d\t", a[i][j]);
printf("\n");
}
int main(int argc, char* argv[])
{
int a[3][3]={{1, 2, 3},{4,5,6},{7,8,9}};
b(a);
getch();
return 0;
}
void b(int **a)
{
int i, j;
for(i=0 ; i<3 ; i++)
for(j=0; j<3; j++)
printf("%d\t", *(a+3*i+j));
printf("\n");
}
int main(int argc, char* argv[])
{
int a[3][3]={{1, 2, 3},{4,5,6},{7,8,9}};
b((int **)a);
getch();
return 0;
}