윤성우 열혈강의 독파 중인 휴학생입니다. 도전 문제를 풀긴 했는데 포인터를 이용해서 다시 풀려고 하니 계속 오류가 뜨는데 이유를 잘 모르겠네요.
문제는 이겁니다.
<길이가 10인 배열을 선언하고 총 10개의 정수를 입력받는다. 단, 입력 받은 숫자가 홀수이면 배열의 앞에서부터 채워나가고, 짝수이면 뒤에서부터 채워나가는 형식을 취하기로 하자. 따라서 사용자가 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]을 입력했다면, 배열에는 [1, 3, 5, 7, 9, 10, 8 ,6 ,4 ,2]의 순으로 저장이 되어야 한다.>
먼저 제가 코딩한건 이건데
#include <stdio.h>
int main(void)
{
int arr[10];
int i, num;
int odd=0, even=9;
printf("총 10개의 숫자 입력 \n");
for(i=0; i<10; i++)
{
printf("입력: ");
scanf("%d", &num);
if(num%2==0)
{
arr[even]=num;
even--;
}
else
{
arr[odd]=num;
odd++;
}
}
for(i=0; i<10; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
위에서 만든 main함수에 포인터를 적용해서 if 구문을 함수형태로 따로 빼보았습니다.
#include <stdio.h>
void Sort(int ary[], int * odptr, int * eveptr, int n)
{
if(n%2==0)
{
ary[*eveptr]=n;
(*eveptr)--;
}
else
{
ary[*odptr]=n;
(*odptr)++;
}
}
int main(void)
{
int arr[10];
int i, num;
int odd=0, even=9;
printf("총 10개의 숫자 입력 \n");
for(i=0; i<10; i++)
{
printf("입력: ");
scanf("%d", &num);
Sort(arr, &odd, &even, num);
}
for(i=0; i<10; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
위와 같이 Sort 함수를 정의해봤는데 컴파일 오류가 수두룩 .... ㅠ 제가 아직 포인터를 잘 이해를 못한건지 왜 틀린건지 잘 모르겠습니다.
원인 좀 알려주시면 감사하겠습니다.
포인터는 배열의 첨자 (index)를 가진 게 아니라 직접적으로 그 배열 원소의 메모리 공간을 가리킴. 고로 arr []가 등장하지 않고 *evenptr = n; evenptr--; 식으로 하면 된다.
ary[] 가 등장하지 않으면 *eveptr이 가리키는 대상을 어떤식으로 변경해야 하는지 감이 잘 안잡히는데, 그냥 main함수에 선언된 even, odd값을 Sort에서 선언하도록 하고 main함수에서 Sort로 전달하는 인자를 Sort(arr, num)으로 하는 건 어떤가요?