제가 막하다가 궁금한게 생겼는데 답변 얻기 어려워서 질문합니다.
우선 소스부터 보여 드리겠습니다

#include <stdio.h>

int* test(void);

int main(void)
{
        int* po;

        po = test();

        printf("%d n", *po);
        return 0;
}

int* test(void)
{
        static int ad[10];
        ad[0]=10;
        return ad;
}

소스는 위와 같습니다.. 이것은 리턴값을 2개 이상 넘겨주기 위해 만든건데요
보시면 test변수에서 ad라는 static int 형 배열을 만들어서 ad의 주소를 리턴해준다음
po로 받아서 0번째 있는것을 출력해주는건데요..
결과값은 예상대로 10이 잘 나옵니다..

그럼 다음소스를 볼까요?

#include <stdio.h>

int* test(void);

int main(void)
{
        int* po;

        po = test();

        printf("%d n", *po);
        return 0;
}

int* test(void)
{
        int ad[10];
        ad[0]=10;
        return ad;
}

자 이소스가 위와 다른건 test변수 안에 static int 였던건 그냥 int로 바꿔주었습니다.
그럼 제가 배웠던 데로 생각해보면.. 지역변수에서는 함수가 끝남과 동시에
사라진다.. 라고 배웠는데 그럼 이론대로라면.. 쓰레기 값이 나와야 정상이다 라고 되는거죠
하지만 10이라는게 그대로 출력됩니다.. 왜일까요??

저는 이렇게 생각해봤습니다... 리턴되는동시에 다른곳에 임시 변수를 만들어 두는것이 아닐까? 하구요
그래서 다음과 같은 소스를 짜봤씁니다.

#include <stdio.h>

int* test(void);

int main(void)
{
        int* po;

        po = test();

        printf("%d n", *po);
        printf("%d n", po);        //추가된 부분
        return 0;
}

int* test(void)
{
        int ad[10];
        ad[0]=10;
        printf("%d", ad);                //추가된 부분
        return ad;
}

test안의 ad[0]의 주소와
main안의 po값를 출력.. 결과값은 같습니다..

즉.. 나중에 생각한것은
변수를 사라진다..
하지만 값은 사라지지 않는다 라는결론이 나왔습니다.
주소야 원래 항상 존재 했던거니 사라지는건 아니고..

근데 여기서 또 궁금증과 에러가 폭발..;;

자 그럼 메모리를 사용한다는것은 무엇일까요??
첫번째 메모리에 값을 넣는 작업..
두번째 변수를 만들어 주는 작업..

첫번째 라고 할경우
int a[10],b;
a[0]= 10; 이것과
b = 10; 이것은 결국 똑같다라는 결론이 나옵니다..;
즉 100개를 만들던 1000개를 만들던 똑같은 속도를 유지 한다고 볼수 있는거죠.;;;

두번째 라고 할경우
변수를 만들고.. 그변수에 값을 집어넣고
변수의 주소를 넘겨오면서 함수 종료와 함께 변수를 지운다 라고 하면
약간 불안정하긴 하지만 메모리를 덜 먹는 셈이 되므로
메모리 사용을 최소화 시킬수 있습니다.

자 어떤가요??
맞는 말인거 같나요??
첫번째의 문제 답을 아직도 잘 해결하지 못했구요..
대략 해결된 문제의 답으로 두번째 같은 이상한 결과를 가져왔습니다.;;;
정확한 답변좀 주세요..

//이해 안되시면 안되는 부분을 다시 질문하주시면 감사드리겠습니다..