본문 바로가기

코딩/C++,C

[C++] 지역변수의 포인터, 참조값 반환

int* car::func3() {

//a는 func3안에서 만들어진 지역변수인데 지역변수의 포인터를 함수밖으로 가지고 나가면
//에러가 떠야 하는데 안뜨네??..경고는 준다는데 왜 안주냐??...포인터가 
int a = 20;
int* b = &a;
return b;
}

main함수에서 car객체를 생성 후  func3()를 실행해보면 return값이 20으로 잘 나온다. 연산도 가능함...why?

예제 프로그램이 매우 간단해서 20이 저장된 변수가 덮어 쓰여지지 않았기 때문입니다(환경에 따라 20이 아예 안나올 수도 있습니다. 그때 그때 달라요). 프로그램이 커지고 복잡해지면 사라진 지역 변수의 공간을 다른 값으로 덮어써버리기 때문에 값이 온전히 유지되지 않습니다.

 

지역변수의 참조값, 포인터를 함수 밖에서도 계속 끌고 나가야할 상황이라면 malloc이나 new를 통해 사용하면 된다!

 

출처

dojang.io/mod/page/view.php?id=529

 

C 언어 코딩 도장: 61.2 포인터 반환하기

지금까지 함수에서 1, 1.1과 같은 값을 가져왔습니다. 그럼 일반적인 값이 아닌 포인터(메모리 주소)는 어떻게 가져올까요? 포인터를 반환하려면 반환값 자료형과 함수 이름 사이에 * (애스터리스

dojang.io

 

'코딩 > C++,C' 카테고리의 다른 글

[C++] static변수는 s_name, 전역변수는 g_name. 변수이름  (0) 2021.02.20
[C++] 객체 생성 java와 비교  (0) 2021.02.18
[C]링크, 링킹  (0) 2021.02.09
[C/C++]링킹  (0) 2021.02.09
[c/c++]strcpy주의점  (0) 2021.02.09