포인터를 이용하여 최댓값 최솟값 구하기

조회수 94회
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에서는 인자로 배열의 갯수를 넘기는 것이 가장 추천되는 방법입니다.

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.