포인터 연습
Programming/C 2011. 5. 27. 02:14
요즘엔 쉘 스크립트만 붙잡고 노는지라, 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;
}
#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);
}
#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 |