Q. c언어 함수 코드 궁금한 게 있습니다

크립토윤 2019. 03. 02.


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;

}

위 함수에서 주석처리된 코드로 바꾸면 마지막으로 입력한 수가 출력됩니다.코드하고 주석 코드하고 같다고 생각했는데 왜 다른 결과가 나오는지 모르겠네요.큰 수만 구하면 정상적으로 되는데.어떻게 된 걸까요?

공유하고 보상받기 ♥︎
별로예요 2

1 토큰 획득을 위한 무성의한 질문
1 기타
* 별로예요 10건 도달시 관리자 검토 후 삭제 조치합니다.
댓글 0

1개의 답변이 있습니다.

질문자 & 큐레이터 채택
hhan87 답변자인증
Casto 2019. 03. 03
100%의 채택

아래 링크에 주석으로 설명을 추가해두었습니다.

https://repl.it/@hhan87/Aha-4458f97ca791da67aea6560ebcfc4cee

일단 간단하게 요약을 하면

*Min = &arr[i]는 포인터 값을 변경하는 구문이고

이경우 *Min은 arr[0]이 아니라 arr[i]를 가리키게 됩니다.

**Min = arr[i]는

*Min이 가리키는 곳의 값(arr[0])을 변경하는 곳입니다.

즉 arr[0] = arr[i]과 같습니다.

댓글 0