C 이중 포인터 변수의 활용
문제
다음과 같이 두 개의 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;
}
}
댓글남기기