-
포인터 얕은 복사 깊은 복사C, C++ 2018. 12. 13. 18:05int* getResult(){ //함수에서 선언한 변수는 stack이라서 함수가 종료될 때 값이 존재하지 않음static int arr[11] = {0,}; // static으로 선언해주면 메인함수에서도 변수가 존재함//int *arr = (int*)malloc(sizeof(int)*10); //이거는 됨int k = 0;for(k = 0; k < 11; k++){arr[k] = 0;}printf("addr %u\n", arr);return arr;}int main(void){int* ptr, i;printf("ptr %d\n", ptr);ptr= getResult();printf("ptr : %u\n", *ptr);for(i = 0; i < 11; i++){printf("%d\n", ptr[i]);}return 0;}
함수에서 local 선언한 배열(주소값)을 return 값으로 지정한 경우( return 값이 pointer 값임)
가리키는 대상인 local 변수는 함수가 끝나는 즉시 소멸하기 때문에 포인터가 가리키는 값도 소멸함...
그래서 static으로 선언한 경우에만 값이 main에서도 존재함...(static은 메모리의 heap 영역에 저장되니까)
'C, C++' 카테고리의 다른 글
String 함수의 사용, 선택정렬- 버블정렬 (0) 2018.12.18 2차원 배열 (0) 2018.12.14 포인터와 배열 (0) 2018.12.13 포인터 (0) 2018.12.12 함수의 선언과 사용 (2) 2018.12.12