본문 바로가기

PL/C & C++

[C/C++] 포인터 반환 함수

 

먼저 함수 반환값의 자료형을 지정할 때 int *ten()과 같이 int 포인터로 지정했습니다. 그리고 변수를 선언하고 값을 할당한 뒤 변수의 메모리 주소를 반환합니다.

컴파일을 해보면 지역 변수의 주소를 반환한다면서 컴파일 경고가 발생합니다. 즉, num1은 함수 ten안에서만 사용할 수 있는 지역 변수이며 함수가 끝나면 사라집니다. 그래서 return &num1;과 같이 지역 변수의 주소를 반환하는 것은 잘못된 방법입니다. 초보자들은 이런 실수를 하기 쉬우니 꼭 기억하세요.

 

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

포인터를 반환하려면 다음과 같이 malloc 함수로 메모리를 할당한 뒤 반환해야 합니다.


 

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

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

dojang.io

 

'PL > C & C++' 카테고리의 다른 글

[C&C++] header 파일 선언 이유  (0) 2020.10.16
함수 선언 이유  (0) 2020.10.16
[C/C++] 매크로 #, ##  (0) 2020.09.13
[C/C++] puts와 printf  (0) 2020.09.07
[C/C++] 수학 관련 함수  (0) 2020.09.01