#include <stdio.h>
void F_max_min (int *arr, int size, int **mx, int **mn);
int main()
{
int arr[5];
int i;
int *max, *min;
for(i=0;i<5;i++)
{
printf("5개의 정수를 입력하시오: ");
scanf("%d", &arr[i]);
}
F_max_min (arr, sizeof(arr)/sizeof(int), &max, &min);
printf("최대: %d, 최소: %d \n", *max, *min);
return 0;
}
void F_max_min (int *arr, int size, int **mx, int **mn)
{
int i;
int *max, *min;
max=min=arr;
for(i=0; i<size; i++)
{
if(*max<arr[i])
max=&arr[i];
if(*min>arr[i])
min=&arr[i];
}
*mx=max;
*mn=min;
}
이 코드가 Call-By-Reference 랑 Double pointer를 이용해서 max와 min을 구하는것인데요
Function쪽을 보시면
max=min=arr 이있잖아요
여기서 그다음 줄에 있는 *max와 *min들이 저장되는데요
만약 숫자를 (17,19,25,6,7)하면
arr[i]중에서 arr의 값은 i가 변해도 주소는 바뀌지 않는데
왜 그 주소가 예를 들어 0x0030fa00이라면 왜 저 주소가 첫번째 값의 주소를 가르키는거죠?
그림을 그려보면
-------------- 17의 주소
--------------
--------------
--------------
--------------
--------------19의 주소
--------------
--------------
--------------
--------------
--------------25의 주소
--------------
--------------
--------------
--------------
--------------6의 주소
--------------
--------------
--------------
--------------
--------------5의 주소
--------------
--------------
--------------
--------------
여서 즉 arr의 주소는 첫번째 칸의 주소이니깐 그런것인가요?
둘째질문은
맨 밑에
*mx=max;
*mn=min;
들은 왜 붙은 것입니까? |