편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
456번째 줄: | 456번째 줄: | ||
이를 통해 C++의 Call By Reference를 비슷하게 흉내내는것 또한 가능하다. | 이를 통해 C++의 Call By Reference를 비슷하게 흉내내는것 또한 가능하다. | ||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
int AllocMe(void **ptr, size_t sz) | int AllocMe(void **ptr, size_t sz) | ||
{ | { | ||
if(!*ptr) // 3. | if(!*ptr) // 3. *ptr은 2번 *myInt 의 주소를 가지고 있으므로 이를 dereferencing 하면 *myInt가 가르키고 있는 주소가 있다 (NULL) | ||
{ | { | ||
*ptr = malloc(sz); // 4. *myInt의 주소의 값에 malloc(); 1.번의 myInt는 | *ptr = malloc(sz); // 4. *myInt의 주소의 값에 malloc(); 1.번의 myInt는 8바이트 만큼 할당되었다. | ||
return *ptr ? 1 : 0; // 5. *ptr에 malloc()이 반환한 | return *ptr ? 1 : 0; // 5. *ptr에 malloc()이 반환한 주소가 들어있다. | ||
} | } | ||
} | } | ||
470번째 줄: | 469번째 줄: | ||
int main() | int main() | ||
{ | { | ||
int *myInt = NULL; // 1. NULL 포인터 | int *myInt = NULL; // 1. NULL 포인터 | ||
if(AllocMe(&myInt, 8)) // 2. 1번의 포인터가 위치한 주소를 전달 (Call by value) | if(AllocMe(&myInt, 8)) // 2. 1번의 포인터가 위치한 주소를 전달 (Call by value) | ||
{ | { | ||
free(myInt); // 6. AllocMe()에서 | free(myInt); // 6. AllocMe()에서 할당된 메모리 주소를 해제 | ||
return 0; | return 0; | ||
} | } |