C 이중 포인터 변수의 활용

최대 1 분 소요

문제

다음과 같이 두 개의 int형 포인터 변수와 길이가 5인 int형 배열을 선언한다.

int * maxPtr;
int * minPtr;
int arr[5];

그리고 MaxAndMin이란 이름의 함수를 정의하고 이를 호출하면서 위의 배열과 두 포인터 변수에 대한 정보를 전달하자.

어떠한 정보를 어떻게 전달할지는 여러분이 결정할 몫이다.

그리고 함수호출이 완료되면, 포인터 변수 maxPtr에는 가장 큰 값이 저장된 배열요소의 주소 값이, minPtr에는 가장 작은 값이 저장된 배열요소의 주소 값이 저장되어야 한다.

해결

코드

#include <stdio.h>
 
void MaxAndMin(int**, int**, int []);
void Compare(int [], int);
 
int main(void)
{
    int * maxPtr=NULL;
    int * minPtr=NULL;
    int max=0;
    int min=0;
    int arr[5];
    int i;
    
    maxPtr = &max;
    minPtr = &min;
    
    for(i=0;i<5;i++)
        scanf("%d", &arr[i]);
    
    MaxAndMin(&maxPtr, &minPtr, arr);
    
    printf("Max: %d Min: %d\n", *maxPtr, *minPtr);
    
    return 0;
}
 
void MaxAndMin(int** dptr, int** pptr, int ptr[])
{
    int k;
    
    for(k=0;k<4;k++)
    {
        if(k==0)
        {
            Compare(ptr, k);
            *dptr = &ptr[k+1];
            *pptr = &ptr[k];
        }
        else
        {
            Compare(ptr, k);
            *dptr = &ptr[k+1];
            
            if(**pptr > ptr[k])
                *pptr = &ptr[k];
        }
    }
}
 
void Compare(int ptr[], int k)
{
    int temp=0;
    
    if(ptr[k+1] < ptr[k])
    {
        temp = ptr[k];
        ptr[k] = ptr[k+1];
        ptr[k+1] = temp;
    }
}

댓글남기기