Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[873] 확실한 최종답변~~~~
찬이 [chanywa] 1910 읽음    2002-07-15 14:57
이번엔 홍보먼저....... ^^

## 홍보 : 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;
}

+ -

관련 글 리스트
866 다차원배열을 다른함수로 넘길때 어떻게해야되는지..;; 김경래 1850 2002/07/15
871     STL vector로 다차원 배열을 구현하는 방법도 참고하세요. 김백일 3119 2002/07/15
868     Re:다차원배열을 다른함수로 넘길때 어떻게해야되는지..;; 찬이 1971 2002/07/15
872         Re:Re:죄송 다시한번;; ±è°æ·¡ 1768 2002/07/15
873             확실한 최종답변~~~~ 찬이 1910 2002/07/15
878                 Re:포인터로 처리할려면... 김인구.구야 1786 2002/07/15
879                     Re:Re:포인터로 처리할려면... 찬이 1817 2002/07/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.