포인터 연습


요즘엔 쉘 스크립트만 붙잡고 노는지라, 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' 카테고리의 다른 글

포인터 연습  (6) 2011.05.27
간단한 디버그 함수  (0) 2010.08.16
오늘도 실수.. iconv  (0) 2010.06.24
아아 또 실수~!  (4) 2009.06.22
주의력 부족  (2) 2009.06.22
이진트리를 만들고나서....아 망했어요...  (2) 2009.05.25
Trackback 0 Comment 6
  1. Favicon of https://khmirage.tistory.com BlogIcon 환상경 2011.05.28 00:48 신고 address edit & del reply

    이게 대체 무슨소리인가요?
    아.....포인터를 안쓰는 파이썬을 너무 오래 봤나.... 하나도 모르겠네열;;;;;;
    역시 천재님!!

    • lowid 2011.05.30 01:42 address edit & del

      저도 쉘스크립트만 보고있다가 갑자기 C를 보려니깐
      좀 햇갈리더라고요~.. 뭐 다시보면 기억나겠죠

  2. Favicon of https://khmirage.tistory.com BlogIcon 환상경 2011.05.28 00:54 신고 address edit & del reply

    아.... 눈이 멀었나.... *array2, i; 선언이 왜 이렇게 되어있지? 하고 한참 쳐다봤었네요 -0-

    • lowid 2011.05.30 01:43 address edit & del

      하긴 저렇게 쓰는거보다 변수마다 타입을 적어두는 형태로도 코딩을 많이 하시더라구요
      근데 전 귀찮아서~ ㅋ

    • Favicon of https://khmirage.tistory.com BlogIcon 환상경 2011.05.31 23:07 신고 address edit & del

      ㅎㅎㅎ 예 제가 좀 독특한 코딩스타일을 사용해오다보니 -0-
      포인터변수 선언도 변수이름에 붙이는게 아니라 타입에 붙이는 방식을 선호했거든요 ~_~

      int *a; 가 아니라 int* a; 요런식으로요 ㅋㅋㅋ

    • Favicon of https://lowid.tistory.com BlogIcon Lowid 2011.06.07 00:10 신고 address edit & del

      사실 그렇게 쓰는게 더 알아보긴 쉽죠.
      근데 대부분 다른 코드에선 변수 바로 앞에 쓰는 경우가 많아서 저도 그냥 관습대로 쓰고 있습니다.

prev 1 2 3 4 5 ··· 22 next