포인터를 이용하여 최댓값 최솟값 구하기
조회수 761회
int maxmin(int ar[])
{
int *px;
int min = 0, max = 0;
for (px = ar; px < (sizeof(ar)/sizeof(int)); px++)
{
if (*px < min)
{
min = *px;
}
if (*px > max)
{
max = *px;
}
}
return max-min;
}
int main()
{
int N,ar[100],sum=0;
int *px,*py;
scanf("%d", &N);
for (px = ar; px < ar + N; px++)
{
for (py = ar; *(py - 1); py++)
{
scanf("%d", py);
}
for (py = ar;sizeof(ar)/sizeof(int)-1; py++)
{
sum = maxmin(py);
}
printf("%d", sum);
}
}
디버깅해본 결과 int maxmin()
함수 안에있는 for
문이 작동하지않는데 (sizeof(ar)/sizeof(int)
이부분이 잘못된 건가요
1 답변
-
잘못되었다기보다 포인터라는 것의 이해가 필요해 보입니다.
포인터의 크기는 32비트 os인 경우 4바이트(32비트)입니다. 질문과 같은 방법으론 원하는 결과를 낼 수 없습니다.
아마도 원하는 답은 "배열의 포인터만 넘겨서 포인터가 참조하는 배열의 갯수를 알 수 있는가?" 일텐데 아쉽게도 알수가 없습니다. 보통 배열의 갯수도 인자로 함께 넘겨 줍니다. 즉 maxmin 함수에 갯수를 변수로 받으세요.
첨언으로 c++ 에서는 배열대신 vector 사용을 권하며 __countof 같은 매크로를 제공할 수 있습니다. 그러나 c에서는 인자로 배열의 갯수를 넘기는 것이 가장 추천되는 방법입니다.
댓글 입력