#include "stdafx.h"
class sbs{
public:
enum A{one, two, three, four};
int* Set(A a) // 4가지 상황에 맞춰서 정수셑을 돌려주는 함수를 생각하고 있어요.
{
switch(a)
{
case one:
{
int pa[3] = {1, 2, 3};
return pa;
}
case two:
{
int pb[3] = {3, 4, 5};
return pb;
}
case three:
{
int pc[3] = {5, 6, 7};
return pc;
}
case four:
{
int pd[3] = {7, 8, 9};
return pd;
}
}
}
};
void main()
{
int* cds;
sbs sk;
cds = sk.Set(sk.two);
printf("%d, %d, %d n%d, %d, %dn", cds[0], cds[1], cds[2], &cds[0], &cds[1], &cds[2]); // 제대로 실행되는줄
for(int i = 0; i < 3; i++) printf("%d, %dn", cds[i], &cds[i]); //
printf("%d, %d, %dn", &cds[0], &cds[1], &cds[2]); //
}
이렇게 하면 첫번째 출력하는 부분은 제대로 출력되는데 그 뒤에 두번째, 세번째 출력할때는 메모리 주소는 같은데 내용이 바뀌네요...
이유가 뭘까요, 어떻게 고치면 제가 원하는 값을 얻을수 있을까요?
local variable을 반환하신거군요
일단
local variable(지역변수) 는
함수를 마치는 }(중괄호) 를 벗어나면
역할을 마치게 됩니다.
그 위치에는 이제 어느 숫자라도 들어갈 수 있죠
첫번째 잘 나온 것은 우연(그 자리에 운좋게 숫자가 덮어씌워지지 않은 것) 이고요
두번 째 후로는 그 위치에 어떤 숫자라도 들어갈 수 있기 때문에
시스템이든 어디든 그 영역을 사용한 것이 되버립니다. -_-;;
배열을 반환하고 싶으시면 배열을 동적으로(new라던지..) 할당하셔야
함수를 벗어나도 자기 위치를 지킵니다.
-_-/ 도움이 되셨기를..