포인터 연습


요즘엔 쉘 스크립트만 붙잡고 노는지라, C는 안한지 몇달이 다되가네여.

포인터도 좀 마니 까먹은듯?

친구가 다중배열 넘기는 방법을 물어보길래 함 짜보네여,

옛날에도 2차원 배열, 2차원포인터로 넘기는건 기본이고 3차원 포인터(!) 까지 쓰고 그랬는데 요즘엔 영 기억이 안난다는

(이게다 스크립트 언어만 만지기 때문임 ㅠㅠ)

친구가 준 소스를 수정 ( 다 바꿨지만)해서 만든 완성본

자세한 설명은 생략, 뭐 어짜피 이블로그 오는사람은 이정도는 다 알겠져.
#include <stdio.h>

#define MAX_ROW 4
#define MAX_COL 5

int PArray_Type (int *array)
{
    int i;

    for(i = 0;i < MAX_COL;i ++){
        printf("%d\n", array[i]);
    }  
}

// 통채로 넘겼으므로, (보낸 배열과 같게)열의 크기를 정해줘야한다.
int PArray_Type2 (int (*array)[MAX_COL])
{
    int i,
        j; 

    for(i = 0;i < MAX_ROW;i ++){
        for(j = 0;j < MAX_COL;j ++){
            printf("%d\n", array[i][j]);
        }  
    }  
}

int main (int *argc, int argv[])
{
    int array[MAX_ROW][MAX_COL] = {{5,7,0,1,3},
                                   {8,2,3,7,0},
                                   {1,6,3,8,4},
                                   {1,2,4,8,3}},
        *array2,
        i; 

    for(i = 0;i < MAX_ROW;i ++){
        array2 = array[i]; // 각 row 의 맨앞 주소만 넘김
        PArray_Type(array2);
    }  

    puts("--");
    PArray_Type2(array);

    return 0;
}  

응용해서.. 다음과 같은것도 넘기는것도 가능합니다.

포인터 배열을 넘길때에는 받는 함수쪽에서 괄호를 주의하도록 합시다.
#include <stdlib.h>    
#include <stdio.h>    
#define FUNCTION_KEY_COUNT 12

char *keysym_function[FUNCTION_KEY_COUNT] = { "F1", "F2", "F3", "F4", "F5", "F6",   
                                                                             "F7", "F8", "F9", "F10", "F11", "F12"};   

void KeyArray_String(char (*array_keycode[FUNCTION_KEY_COUNT]))
{   
    int i;   
   
    for(i = 0;i < FUNCTION_KEY_COUNT;i ++){   
        printf("%s\n", array_keycode[i]);
    }   
}   

int main(int argc, char **argv)
{
    KeyArray_String(keysym_function);
}


'Programming > C' 카테고리의 다른 글

간단한 디버그 함수  (0) 2010.08.16
오늘도 실수.. iconv  (0) 2010.06.24
아아 또 실수~!  (4) 2009.06.22
주의력 부족  (2) 2009.06.22
이진트리를 만들고나서....아 망했어요...  (2) 2009.05.25