61질문드려요
, w white님이 작성61.2 포인터 반환하기 예제를 보면
main부분에 int *numPtr변수를 선언하는데, 함수부분에 동적 메모리를 할당해서 함수가 끝나도 유지가 되는데 굳이 다시 변수를 선언하는 이유가 있나요??
두번째로는 numPtr=ten()을 지정해주는데 ten()반환값이 numPtr인데
다시 numPtr에 값을 저장해주는 이유가 뭔가요??
Re: 61질문드려요
, 도장_ 관리자님이 작성#include <stdio.h>
#include <stdlib.h> // malloc, free 함수가 선언된 헤더 파일
int *ten() // int 포인터를 반환하는 ten 함수 정의
{
int *local = malloc(sizeof(int)); // int 크기만큼 동적 메모리 할당
*local = 10; // 역참조로 10 저장
return local; // 포인터 반환. malloc으로 메모리를 할당하면 함수가 끝나도 사라지지 않음
}
int main()
{
int* numPtr;
numPtr = ten(); // 함수를 호출하고 반환값을 numPtr에 저장
printf("%d\n", *numPtr); // 10: 메모리를 해제하기 전까지 안전함
free(numPtr); // 다른 함수에서 할당한 메모리라도 반드시 해제해야 함
return 0;
}
#include <stdlib.h> // malloc, free 함수가 선언된 헤더 파일
int *ten() // int 포인터를 반환하는 ten 함수 정의
{
int *local = malloc(sizeof(int)); // int 크기만큼 동적 메모리 할당
*local = 10; // 역참조로 10 저장
return local; // 포인터 반환. malloc으로 메모리를 할당하면 함수가 끝나도 사라지지 않음
}
int main()
{
int* numPtr;
numPtr = ten(); // 함수를 호출하고 반환값을 numPtr에 저장
printf("%d\n", *numPtr); // 10: 메모리를 해제하기 전까지 안전함
free(numPtr); // 다른 함수에서 할당한 메모리라도 반드시 해제해야 함
return 0;
}
ten 함수의 변수명을 local로 바꿨습니다. 이렇게 이해하세요.
ten 함수 호출이 끝나면 ten 안에서 선언한 변수 이름 numPtr은 사라집니다. main 함수의 numPtr과는 범위(scope)가 다릅니다.
ten::numPtr과 main::numPtr은 다릅니다.(ten::numPtr은 함수의 범위와 거기에 속한 변수명을 보여주려고 임의로 표기한 표기법입니다. 이런 문법은 없습니다)
굳이 다시 변수를 선언한 게 아닙니다.
같은 변수명을 쓴 작가님이 문제입니다.