C (프로그래밍 언어) 편집하기


편집하면 당신의 IP 주소가 공개적으로 기록됩니다. 계정을 만들고 로그인하면 편집 시 사용자 이름만 보이며, 위키 이용에 여러 가지 편의가 주어집니다.

편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.

최신판 당신의 편집
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. **ptr은 2번 *myInt 의 주소인 0x01를 가르키고 있으므로 이를 dereferencing 하면 *myInt가 가르키고 있는 값인 NULL값을 읽음.
   if(!*ptr) // 3. *ptr은 2번 *myInt 의 주소를 가지고 있으므로 이를 dereferencing 하면 *myInt가 가르키고 있는 주소가 있다 (NULL)
   {
   {
     *ptr = malloc(sz); // 4. *myInt의 주소의 값에 malloc(); 1.번의 myInt는 malloc()이 반환한 0x10주소를 저장. (메모리 주소 0x1에는 0x10이라는 값이 들어 있음)
     *ptr = malloc(sz); // 4. *myInt의 주소의 값에 malloc(); 1.번의 myInt는 8바이트 만큼 할당되었다.
     return *ptr ? 1 : 0; // 5. *ptr에 malloc()이 반환한 주소(0x10)가 들어있다.
     return *ptr ? 1 : 0; // 5. *ptr에 malloc()이 반환한 주소가 들어있다.
   }
   }
}
}
470번째 줄: 469번째 줄:
int main()
int main()
{
{
   int *myInt = NULL; // 1. NULL 포인터 - *myInt := 스택 메모리 0x01, 0x01에 저장된 값은 0 (NULL)
   int *myInt = NULL; // 1. NULL 포인터
   if(AllocMe(&myInt, 8)) // 2. 1번의 포인터가 위치한 주소를 전달 (Call by value) 주소값인 0x01이 전달
   if(AllocMe(&myInt, 8)) // 2. 1번의 포인터가 위치한 주소를 전달 (Call by value)
   {
   {
     free(myInt); // 6. AllocMe()에서 할당한 메모리 주소(0x10)를 해제
     free(myInt); // 6. AllocMe()에서 할당된 메모리 주소를 해제
    myInt = NULL; // myInt (0x1)의 값은 다시 NULL
     return 0;
     return 0;
   }
   }
리브레 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포됩니다(자세한 내용에 대해서는 리브레 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
글이 직접 작성되었거나 호환되는 라이선스인지 확인해주세요. 리그베다 위키, 나무위키, 오리위키, 구스위키, 디시위키 및 CCL 미적용 사이트 등에서 글을 가져오실 때는 본인이 문서의 유일한 기여자여야 하고, 만약 본인이 문서의 유일한 기여자라는 증거가 없다면 그 문서는 불시에 삭제될 수 있습니다.
취소 편집 도움말 (새 창에서 열림)

| () [] [[]] {{}} {{{}}} · <!-- --> · [[분류:]] · [[파일:]] · [[미디어:]] · #넘겨주기 [[]] · {{ㅊ|}} · <onlyinclude></onlyinclude> · <includeonly></includeonly> · <noinclude></noinclude> · <br /> · <ref></ref> · {{각주}} · {|class="wikitable" · |- · rowspan=""| · colspan=""| · |}