아하 로고
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
고독한날쥐54
고독한날쥐5419.03.02
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]과 같습니다.