찬이 님이 쓰신 글 :
: 이번엔 홍보먼저....... ^^
:
: ## 홍보 :
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;
: }