[code:35q2a4nx]#include <stdio.h>
int input(int* prr);
int MaxMin(int*prr2 , int** M , int** m);
int main(void)
{
int max = 0;
int min = 0;
int* pmax = &max;
int* pmin = &min;
int arr[5];
input(arr);
MaxMin(arr , &pmax , &pmin);
//printf("\n");
printf("Most big number: %d \n" , *pmax);
printf("address value of big number: %d \n" , pmax);
printf("Most small number: %d \n" , *pmin);
printf("address value of small number: %d \n" , pmin);
return 0;
}
int input(int* prr)
{
int i;
for(i=0; i<=4; i++)
{
printf("Please input number:");
scanf("%d" , &prr[i]);
}
}
int MaxMin(int*prr2 , int** M , int** m)
{
int i;
int val = 0;
int val2 = 9999;
for(i=0; i<=4; i++)
{
if(val<prr2[i])
{
val = prr2[i];
*M = &val;
}
}
printf("Val's address value:%d \n" , &val);
for(i=0; i<=4; i++)
{
if(val2>prr2[i])
{
val2 = prr2[i];
*m = &val2;
}
}
printf("Val2's address value:%d \n" , &val2);
}
[/code:35q2a4nx]
/ 입력받은 배열값중 가장 큰값과 가장 작은 값을 출력시켜주는 단순한 프로그램입니다. 더블포인터를 인자로 사용 하였구요, 근대 코드를 다 작성하고 컴파일할때 에러는 나오지 않았습니다. 그리고 나서 코드를 컴파일 시켜 실행한 프로그램 또한 이상 없이 잘 돌아 갔습니다. 근대 가만히 코드를 쳐다보니 이상한점이 한두개 발견되더 군요… 바로 MaxMin함수내에 존재하는 val값과 val2값에 관한 것 이었습니다. 두개의 변수는 MaxMin함수내에서 선언되어진 지역변수인대 더블포인터M과 m이 정상적으로 참고하고 값을 출력한것 이었습니다. 제가 알기로는 지역변수는 함수가 종료되는 즉시 메모리상에서 지워지는것으로 알고있습니다. MaxMin함수가 끝나고 분명 val과 val2는 메모리에서 지워 졋을탠대 어떻게 더블포인터M과m이 정상적으로 값을 참고하여 출력을 하였는지 궁금하였습니다.(물론 해당되는 배열요소의 주소값을 *m과 *M에 대입시키는 방법도 있는것을 숙지하고 다른방법으로 해본것 이었습니다.) 또 한가지가 바로 제가 주석처리를 한 부분인대요, 출력결과과 덕지덕지 붙어있어 구분이 잘 가지 않았습니다. 그래서 줄을 하나 띄우고 출력시키기위해 주석처리한 부분을 작성하고 컴파일하여 프로그램을 실행했습니다.(물론 에러는 없었지요.) 허나 출력결과과 완전 딴판이었습니다. / (우분투환경에서 gcc로 컴파일 하였습니다.)
/ 정상적인 출력결과 /(주석처리를 하고 컴파일 하였습니다. 한줄이 띄여있지는 않구요.)
Please input number:1
Please input number:2
Please input number:3
Please input number:4
Please input number:5
Val’s address value:1315807460
Val2’s address value:1315807464
Most big number: 5
address value of big number: 1315807460
Most small number: 1
address value of small number: 1315807464
/ 비 정상적인 출력결과 / (주석처리를 지우고 컴파일 한 결과입니다. 한줄이 띄어져 있구요.)
Please input number:1
Please input number:2
Please input number:3
Please input number:4
Please input number:5
Val’s address value:2045530612
Val2’s address value:2045530616
Most big number: 0
address value of big number: 2045530612
Most small number: -631174732
address value of small number: 2045530616
줄하나 더 띄우려고 printf("\n"); 을 추가시킨것 뿐인대 왜 이런 결과과 나온걸까요? 또 val과 val2는 어떻게 포인터들이 참조한 걸까요?,
P.S)아직 많이 부족하고 배우지못해서 스스로 해결하는대 많이 힘이드내요; 여러분들의 답변 기다리고 있겠습니다…