c언어 함수 코드 궁금한 게 있습니다
void MaxandMin(int **Max,int **Min, int arr[])
{
int i;
for (i = 0; i < 5; i++)
{
if (**Max < arr[i])
*Max = &arr[i]; // **Max = arr[i];
if (**Min > arr[i])
*Min = &arr[i]; // **Min = arr[i];
}
}
int main(void)
{
int arr[5];
int *max,*min;
int i;
for (i = 0; i < 5; i++)
{
printf("숫자 입력: ");
scanf_s("%d", &arr[i]);
}
max = min = &arr[0];
MaxandMin(&max, &min, arr);
printf("큰 수: %d, 작은 수: %d", *max, *min);
return 0;
}
위 함수에서 주석처리된 코드로 바꾸면 마지막으로 입력한 수가 출력됩니다.코드하고 주석 코드하고 같다고 생각했는데 왜 다른 결과가 나오는지 모르겠네요.큰 수만 구하면 정상적으로 되는데.어떻게 된 걸까요?
아래 링크에 주석으로 설명을 추가해두었습니다.
https://repl.it/@hhan87/Aha-4458f97ca791da67aea6560ebcfc4cee
일단 간단하게 요약을 하면
*Min = &arr[i]는 포인터 값을 변경하는 구문이고
이경우 *Min은 arr[0]이 아니라 arr[i]를 가리키게 됩니다.
**Min = arr[i]는
*Min이 가리키는 곳의 값(arr[0])을 변경하는 곳입니다.
즉 arr[0] = arr[i]과 같습니다.