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

C/C++ Q/A
[1087] Re:[질문] 다차원 배열을 함수의 리턴하려면 리턴type을 어케해야하나요???
김인구.구야 [whileone] 3347 읽음    2002-09-05 10:21
아~ 저도 무진장 고민해봤습니다...
어떻게 될꺼 같아서요...
결론은 방법을 못찾겠습니다.
일단 다차원(여기선 2차원)배열을 주고 받는 방법은 2가지가 있습니다.
아래 1번과 2번이요.

제가 이해한 C++학생님의 의도는 Add함수에서 temp(2차원배열)를 잡아서
그 주소를 main으로 가져와서 temp를 엑세스 하실려는거 같습니다.
int temp[2][2] = Add(a, b);
이 부분이 2차원 배열의 주소를 받기위해서 쓰신거 같은데 조금 틀린 표현입니다.
여기서 temp는 const변수라서 값을 할당 할 수가 없습니다.
이미 스택영역에 2행 2열의 배열을 가르키고 있기 때문에 그 영역이외에는 가르킬수가 없습니다.
그리고 함수내에서 선언해준거니까 static영역에 잡아서 함수가 종료되도 temp가
남아 있게 하신거구요...
이해를 제대로 했는지는 모르겠지만 전 이렇게 생각하니까 꼭 될꺼 같아서
이래저래 해봐도 답이 안나오네요.

첫번째 문제는 함수의 리턴형에 열의 개수가 몇개인(여기선 2개) 다차원 배열을 리턴하겠다는
표현을 어떻게도 할수가 없었습니다.
두번째는 staitc변수는 프로그램이 끝날때 까지 살아남아 있지만 그 사용범위는
선언된 블럭내라고 합니다.
책의 표현을 빌자면 생존성은 전역인데 가시권이 지역이라는군요.
그래도 내가 주소를 가져와서 엑세스 하겠다는데 왜 안되는지 저도 이부분에서
될꺼같아서 해봤는데 힘드네요...
엑세스 방법을 제공 하지 않는것인지 할수가 없어서 방법이 없는것인지 저도 궁금하네요...

아래 1번은 main에서 temp를 스택영역에 잡고 그 주소를 전달해서 Add함수가 값을 채운거구요
2번은 Add함수가 힙영역에 temp를 잡아서 값을 채우고 그 주소를 main으로 전달 하는겁니다.
main에서 스택영역에 만든 변수는 main이 끝나야 없어지니까 계속 유지되구요
Add함수가 힙영역에 만든 변수는 free를 해야 없어지니까 그 전까지는 계속 유지됩니다.

1번
void Add(int (*x)[2], int (*y)[2], int (*temp)[2])
{
    int i, j;

    for(i=0; i<2; i++)
        for(j=0; j<2; j++)
            temp[i][j] = x[i][j] + y[i][j];
}

void main(void)
{
    int a[2][2] = {{1, 2}, {3 ,4}};
    int b[2][2] = {{2, 3}, {4, 5}};
    int temp[2][2];

    Add(a, b, temp);

    printf("%d %d\n", temp[0][0], temp[0][1]);
    printf("%d %d",    temp[1][0], temp[1][1]);
}

2번
int** Add(int (*x)[2], int (*y)[2])
{
    int i, j;
    int **temp;
    int row = 2, col = 2;

    temp = (int**)malloc(sizeof(int*) * row);
    for(i=0; i<row; i++)
        *(temp+i) = (int*)malloc(sizeof(int) * col);
   
    for(i=0; i<row; i++)
        for(j=0; j<col; j++)
            temp[i][j] = x[i][j] + y[i][j];

    return temp;
}

void free_Add(int** temp)
{
    int i;

    for(i=0; i<2; i++)
    {
        free(*(temp+i));
        *(temp+i) = NULL;
    }

    free(temp);
    temp = NULL;
}

void main(void)
{
    int a[2][2] = {{1, 2}, {3 ,4}};
    int b[2][2] = {{2, 3}, {4, 5}};
    int **temp;

    temp = Add(a, b);

    printf("%d %d\n", temp[0][0], temp[0][1]);
    printf("%d %d",    temp[1][0], temp[1][1]);

    free_Add(temp);
}

+ -

관련 글 리스트
1084 [질문] 다차원 배열을 함수의 리턴하려면 리턴type을 어케해야하나요??? C++학생 1595 2002/09/04
3517     Re:[질문] 다차원 배열을 함수의 리턴하려면 리턴type을 어케해야하나요??? 서정국.새더 1720 2002/09/06
3516     Re:[질문] 다차원 배열을 함수의 리턴하려면 리턴type을 어케해야하나요??? 서정국.새더 1656 2002/09/06
1087     Re:[질문] 다차원 배열을 함수의 리턴하려면 리턴type을 어케해야하나요??? 김인구.구야 3347 2002/09/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.