Ãʺ¸ÀÚ¸¦ À§ÇÑ Æ÷ÀÎÅÍ °¡À̵å
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

¿øº»±Û : http://www.codeproject.com/cpp/pointers.asp
Donwload source files - 3kb

¹ø¿ª±Û : [http]DCÀλçÀ̵å ÇÁ·Î±×·¡¹Ö °¶·¯¸®

dcinside ÇÁ°¶ÀÇ Ä¿ÇôÔÀÌ ¹ø¿ªÇÑ°É °¡Áö°í ¿Ô½À´Ï´Ù. ±ÞÇÏ°Ô ¹ø¿ªµÈ°Å¶ó¼­ ¼öÁ¤µÉ ºÎºÐÀÌ ¸¹À¸¸®¶ó »ý°¢µË´Ï´Ù. Á¤¸®Çϸ鼭 ÇÊ¿äÇÑ ºÎºÐÀ» ¼öÁ¤ÇØ ³ª°¥ »ý°¢ÀÔ´Ï´Ù.

Contents

1 Æ÷ÀÎÅͶõ?
1.1 ½ÃÀÛ
1.2 ¹è¿î°É È®ÀÎÇØ º¸ÀÚ
1.3 ÇÔÁ¤!
1.4 µ¿Àû ÇÒ´ç
1.5 ¸Þ¸ð¸®ÀÇ ÇÒ´ç°ú ÇØÁ¦
1.6 ÇÔ¼ö·Î Æ÷ÀÎÅÍ Àü´ÞÇϱâ
1.7 Ŭ·¡½º Æ÷ÀÎÅÍ
1.8 ¹è¿­ÀÇ Æ÷ÀÎÅÍ
1.9 ¹è¿­ÀÇ Æ÷ÀÎÅÍ ÀÌ¿ëÇϱâ
2 FAQ
2.1 new¿Í delete¸¦ ¾²·Á´Âµ¥ ¿Ö 'symbol undefined' ¿¡·¯°¡ ³ª³ª¿ä?
2.2 new¿Í mallocÀÌ ¾î¶»°Ô ´Ù¸£³ª¿ä?
2.3 free ¿Í delete¸¦ °°ÀÌ »ç¿ëÇØµµ µÇ³ª¿ä?
2.4 ÂüÁ¶
3 Á¤¸®
4 Âü°í¹®¼­µé
5 Comment

1 Æ÷ÀÎÅͶõ?

Æ÷ÀÎÅÍ´Â ±âº»ÀûÀ¸·Î ´Ù¸¥ º¯¼ö¿Í µ¿ÀÏÇÑ »õ·Î¿î ŸÀÔÀÇ º¯¼ö´Ù. ´Ù¸¥ º¯¼öµéÀÌ ½Ç µ¥ÀÌÅ͸¦ °¡Áö°í ÀÖ´Â °Í ´ë½Å¿¡ µ¥ÀÌÅͰ¡ ÀúÀåµÈ ¸Þ¸ð¸® °ø°£ÀÇ ÁÖ¼Ò¸¦ °¡Áö°í ÀÖ´Ù´Â Á¡¿¡ À־ Â÷À̰¡ ÀÖ´Ù. µ¥ÀÌÅͰ¡ ÀúÀåµÈ ¸Þ¸ð¸® °ø°£ÀÇ ÁÖ¼Ò, Áï À§Ä¡Á¤º¸¸¦ °¡Áö°í ÀÖ´Ù´Â °ÍÀº ¸Å¿ì ´Ü¼øÇÑ °³³ä°°Áö¸¸, ¸Å¿ì Áß¿äÇÑ °³³äÀ̱⵵ ÇÏ´Ù. C¿Í C++·Î µðÀÚÀÎµÈ ¸µÅ©µå¸®½ºÆ®, Æ®¸® ¿Í °°Àº ÀڷᱸÁ¶µéÀÌ Æ÷ÀÎÅÍ °³³äÀ» ±â¹ÝÀ¸·Î Çϰí ÀÖ´Ù. Perl, Java¿Í°°ÀÌ Æ÷ÀÎÅÍ ´ë½Å ·¹ÆÛ·±½º °³³äÀ» °¡Áø ¾ð¾îµéÀ̶ó ÇÒÁö¶óµµ ±âº»°³³ä¿¡ À־ Æ÷ÀÎÅÍ¿Í º° Â÷À̰¡ ¾øÀ½À» ¾Ë ¼ö ÀÖ´Ù.
(¿ªÁÖ: Æ÷ÀÎÅÍ¿¡ ´ëÇØ¼­ Á»´õ ½¬¿î ¼öÁØ¿¡¼­ Á¢±ÙÇÏ±æ ¿øÇÑ´Ù¸é, Java¿Í ÇÔ²² ÇÏ´Â ÄÄÇ»ÅÍ °úÇÐ 3Àå°ú Spim 1-3Àå, 1-2Àå¹®¼­¸¦ Âü°íÇϱ⠹ٶõ´Ù. ÀÌµé ¹®¼­¸¦ °¡º±°Ô Àд Á¤µµ·Î Æ÷ÀÎÅÍÀÇ °³³äÀ» Àâ±â°¡ ÇÑÃþ ¼ö¿ùÇØ Áú °ÍÀÌ´Ù.)

1.1 ½ÃÀÛ

¾î¶»°Ô Æ÷ÀÎÅ͸¦ Á¤ÀÇÇÒ¼ö ÀÖ³ª.
º¯¼öÀ̸§¿¡ º°Ç¥(*)¸¦ ºÙÀ̴°ÍÀ» Á¦¿ÜÇÏ°ï ´Ù¸¥º¯¼ö¿Í µ¿ÀÏÇÏ´Ù.

¿¹¸¦µé¾îº¸ÀÚ, ¾Æ·¡ÀÇ µÎ°³´Â µÑ´Ù intÇü Æ÷ÀÎÅÍ Æ÷ÀÎÅ͸¦ ¸¸µé¾îÁØ´Ù :
int* pNumberOne; 
int* pNumberTwo; 
 
µÎ º¯¼öÀÇ À̸§À» º¸¸é ¾Õ¿¡ °øÅëÀûÀ¸·Î ¹®ÀÚp°¡ ºÙ¾îÀÖ´Â°É ¾Ë ¼ö ÀÖ´Ù. ÀÌ°Ç ÀÌ º¯¼ö°¡ pointer ÇüÀ̶ó´Â °ÍÀ» ´Ù¸¥ °³¹ßÀÚ°¡ ½±°Ô ÀÎÁöÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§ÇÑ ÀÏÁ¾ÀÇ Ç³½ÀÀÌ´Ù. ¹Ýµå½Ã ÀÌ ±ÔÄ¢À» µû¸¦ ÇÊ¿ä´Â ¾ø´Ù. p_¸¦ ºÙ¿©µµ µÇ°í P¸¦ ºÙ¿©µµ µÉ°ÍÀÌ´Ù. ¾î¶µç Ç¥ÁØÀûÀÎ ·êÀ» ¸¸µé¾î¼­ »ç¿ëÇÏ¸é µÈ´Ù. ÀÌ´Â ¼Ò½º ÇÁ·Î±×·¥ÀÇ °¡µ¶¼ºÀ» ³ô¿©Áشٴ Á¡¿¡¼­ ¸Å¿ì Áß¿äÇÑ ÀÏÀÌ´Ù.

À§ ¼±¾ð¿¡¼­ Æ÷ÀÎÅÍ º¯¼öÀÓÀ» ¾Ë·ÁÁÖ±â À§Çؼ­ *°¡ »ç¿ëµÇ°í ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù.

ÀÌÁ¦, ¸¸µé¾îÁø Æ÷ÀÎÅÍ·Î ¹«¾ð°¡¸¦ ÇØº¸ÀÚ :
pNumberOne = &some_number; 
pNumberTwo = &some_other_number; 
 
&±âÈ£´Â 'the address of' ¶ó°í ÀÐÀ» ¼ö ÀÖ´Ù. ±×¸®°í º¯¼öÀÚ½ÅÀ» ´ë½ÅÇØ ¸Þ¸ð¸® ÁÖ¼Ò¸¦ µÇµ¹·ÁÁØ´Ù. Áï À§ÀÇ ÄÚµå´Â some_numberÀÇ ¸Þ¸ð¸® ÁÖ¼Ò¸¦ pNumberOne¿¡ ´ëÀÔ(ȤÀº ÀúÀå)Çϰڴٴ Àǹ̰¡ µÈ´Ù. pNumberOne¿¡´Â some_numberÀÇ ÁÖ¼Ò°¡ µé¾î ÀÖ´Â °ÍÀÌ´Ù.

¸¸¾à ¿ì¸®°¡ some_numberÀÇ ÁÖ¼Ò¸¦ ÂüÁ¶Çؼ­ °ªÀ» ÀоîµéÀ̰ųª º¯°æÇÏ±æ ¿øÇÑ´Ù¸é pNumberOneÀ» ÀÌ¿ëÇÏ¸é µÈ´Ù. pNumberOneÀº some_numberÀÇ ÁÖ¼Ò¸¦ °¡¸®Å°°í Àֱ⠶§¹®ÀÌ´Ù. ¸¸¾à pNumberOneÀ¸·ÎºÎÅÍ some_numberÀÇ °ª (Value)Áï ÁÖ¼Ò°¡ °¡¸®Å°°í ÀÖ´Â ¸Þ¸ð¸®¿¡ ÀúÀåµÈ °ªÀ» ÂüÁ¶Çϱ⠿øÇÑ´Ù¸é *¸¦ ÀÌ¿ëÇØ¼­ *pNumberOneÀ¸·Î »ç¿ëÇÏ¸é µÈ´Ù.

1.2 ¹è¿î°É È®ÀÎÇØ º¸ÀÚ

¸¸¾à ¾ÕÀÇ ³»¿ëÀ» ÀÌÇØÇÏÁö ¸øÇß´Ù¸é, Æ÷±âÇϱâ Àü¿¡ ÀÌ ¿¹Á¦¸¦ Àо±â¸¦ ÃßõÇÑ´Ù. ¹ØÀÇ Äڵ带 º¸¸é Æ÷ÀÎÅ͸¦ Á»´õ ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

#include <stdio.h> 
 
void main() 
{ 
    // º¯¼öÀÇ ¼±¾ð 
    int nNumber; 
    int *pPointer; 
 
    // ÀÌÁ¦, º¯¼ö¸¦ ´ëÀÔÇÑ´Ù 
    nNumber = 15; 
    pPointer = &nNumber; 
 
    // nNumber·ÎºÎÅÍ º¯¼ö¸¦ Ãâ·ÂÇØÁØ´Ù: 
    printf("nNumber is equal to : %dn", nNumber); 
 
    // ÀÌÁ¦, pPointer¸¦ ÅëÇØ nNumber¸¦ ¹Ù²ãº¸ÀÚ: 
    *pPointer = 25; 
 
    // À§ ¸í·ÉÀ¸·Î ÀÎÇØ nNumber°¡ º¯°æÀÇ °á°ú¸¦ Áõ¸íÇϱâÀ§ÇØ 
    // º¯¼ö¸¦ ´Ù½Ã Ãâ·ÂÇÑ´Ù: 
    printf("nNumber is equal to : %dn", nNumber); 
} 
 
À§ÀÇ Äڵ带 »ý°¢Çϸé Àо°í, °ªÀ» ¹Ì¸®¿¹ÃøÇÑ ÈÄ ÄÄÆÄÀÏ ÇØ¼­ ½ÇÇà½ÃÄÑ º¸µµ·Ï ÇÏÀÚ. ¿¹ÃøÇÑ´ë·Î °ªÀÌ ³ª¿ÀÁö ¾ÊÀº´Ù¸é, Äڵ带 ÀÌÇØÇÏ°í ¿¹ÃøÀÌ °¡´ÉÇÒ ¶§±îÁö, °è¼Ó ÀÐ°í °è¼Ó ½ÇÇàÇØ º¸±â ¹Ù¶õ´Ù.

1.3 ÇÔÁ¤!

¾Æ·¡ÀÇ Äڵ忡´Â ¹®Á¦°¡ ¼û¾î ÀÖ´Ù. ã¾Æº¸ÀÚ.
#include <stdio.h> 
 
int *pPointer; 
 
void SomeFunction(); 
{ 
    int nNumber; 
    nNumber = 25;     
 
    // pPointer Æ÷ÀÎÅÍ¿¡ nNumberÀ» ¸¸µé¾îÁØ´Ù: 
    pPointer = &nNumber; 
} 
 
void main() 
{ 
    SomeFunction(); // pPointer ÁÖ¼Ò¿¡ ¹«¾ð°¡ ¸¸µé¾îÁØ´Ù 
 
    // ¿Ö ½ÇÆÐÇϴ°¡!? 
    printf("Value of *pPointer: %dn", *pPointer); 
} 
 

À§ ÇÁ·Î±×·¥Àº À߸øµÈ ÇÁ·Î±×·¥À¸·Î, ²Ï³ª ½É°¢ÇÑ ¹®Á¦¸¦ °¡Áö°í ÀÖ´Ù. ÁÖ¼®¿¡´Â ½ÇÆÐÇÑ´Ù°í ¸»Çϰí ÀÖÁö¸¸ ¸¹Àº °æ¿ì 'Á¦´ë·Î ÀÛµ¿µÇ´Â °Í󷳺¸À̱⠶§¹®ÀÌ´Ù. ¿©Æ° À§ ÇÁ·Î±×·¥Àº °áÁ¤ÀûÀÎ ¹®Á¦°¡ ÀÖ´Ù.

ÇÁ·Î±×·¥Àº SomeFunctionÇÔ¼ö¸¦ È£ÃâÇϰí, nNumberº¯¼ö¸¦ »ý¼ºÇÑÈÄ¿¡ pPointer ¿¡ ´ëÀÔÇÑ´Ù. ÀÌÁ¦ pPointerÀº nNumberÀÇ ÁÖ¼Ò¸¦ °¡¸®Å°°Ô µÉ °ÍÀÌ´Ù. ÇÏÁö¸¸ nNumberÀº Áö¿ªº¯¼öÀ̱⠶§¹®¿¡ ÇÔ¼ö¸¦ ºüÁ®³ª°¥ ¶§ »ç¶óÁø´Ù´Â ¹®Á¦Á¡ÀÌ ÀÖ´Ù.

Áö¿ªº¯¼ö´Â Ç×»ó ¼±¾ðÇÑ ±× ºí·°¿¡¼­ ÀÌ¿ëµÇ°í ºüÁ®³ª°¥¶§ Áö¿öÁø´Ù. ÀÌ °ÍÀº ¸Å¿ì Áß¿äÇÑ °³³äÀε¥, À̰ÍÀ» ÀÌÇØÇÏ·Á¸é, ÇÁ·Î¼¼½º°¡ ¸í·ÉÀ» ¾î¶»°Ô ½ºÅÿ¡ À¯ÁöÇÏ´ÂÁö¿¡ ´ëÇÑ °ÍÀ» ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀ» ¾Ë±â¸¦ ¿øÇÑ´Ù¸é ¾î¼Àºí¸® ÇÁ·Î±×·¡¹Ö - ÇÔ¼öÆíÀ» ÀÐ¾î º¸±â ¹Ù¶õ´Ù. ±»ÀÌ ±íÀÌ ¾Ë°í ½ÍÁö ¾Ê´Ù¸é, ¿ì¼±Àº Áö¿ªº¯¼ö´Â ÇØ´ç ÇÔ¼ö¿¡¼­¸¸ À¯È¿ÇÏ´Ù´Â °ÍÀ» ÀÎÁöÇÏ´Â ¼öÁØ¿¡¼­ ³Ñ¾î°¡µµ·Ï ÇÑ´Ù.

ÀÌÁ¦ ¹®Á¦¸¦ ¾Ë¾ÒÀ¸´Ï ¹®Á¦¸¦ Ç®¾î¾ß ÇÒ°ÍÀÌ´Ù. ÀÌ ¹®Á¦¸¦ Ç®±â À§Çؼ­´Â ¸Þ¸ð¸® ÇÒ´ç°ú °ü·ÃµÈ ±â¼úÀ» ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù.

1.4 µ¿Àû ÇÒ´ç

µ¿Àû ÇÒ´çÀº Æ÷ÀÎÅ͸¦ »ç¿ëÇÔÀ¸·Î½á ¹ß»ýÇÏ´Â ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇÑ Áß¿äÇÑ °³³äÀ̸ç, Æ÷ÀÎÅÍ¿Í ÇÔ²² Çʼö·Î »ç¿ëµÈ´Ù.

µ¿Àû ÇÒ´çÀº µ¿Àû_¸Þ¸ð¸®_ÇÒ´çÀÇ ÁÙÀÓ¸»ÀÌ´Ù. Áï »ç¿ë°¡´ÉÇÑ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ´Â ±â¼úÀ̶ó°í º¸¸é µÈ´Ù. »ç¿ë°¡´ÉÇÑ ¸Þ¸ð¸®¸¦ °ø°£À» ÇÒ´ç ¹Þ¾Ò´Ù¸é, µµ´ëü ±× ¸Þ¸ð¸® °ø°£ÀÌ ¾îµð¿¡ ÀÖ´ÂÁö¿¡ ´ëÇÑ Á¤º¸¸¦ ¾Ë°í ÀÖ¾î¾ß ÇÒ°ÍÀÌ´Ù. ´ç½ÅÀÇ ÄÄÇ»ÅͰ¡ 1GÀÇ ¸Þ¸ð¸®¸¦ °¡Áö°í ÀÖ°í, ¿©±â¿¡¼­ 1¸Þ°¡ÀÇ °ø°£À» µ¿ÀûÀ¸·Î ÇÒ´ç¹Þ¾Ò´Ù¸é, ±× 1¸Þ°¡ÀÇ °ø°£ÀÌ 1GÀÇ °ø°£Áß ¾îµð¿¡ ÀÖ´ÂÁö¸¦ ¾Ë¾Æ¾ß »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ´ÙÇàÈ÷ ¿ì¸®´Â ¸Þ¸ð¸®°¡ ÇÒ´çµÈ °÷ÀÇ ½ÃÀÛÁÖ¼Ò¸¦ ¾Ë ¼ö ÀÖÀ¸¸ç, ÀÌ ÁÖ¼Ò¸¦ »ç¿ëÇϱâ À§ÇÑ Æ÷ÀÎÅ͵µ ¾Ë°í ÀÖ´Ù.

ºñ·Ï °³³äÀÌ ¸¹ÀÌ ÇÞ°¥¸±¼öÀÖ°ÙÁö¸¸ , ¸Å¿ì °£´ÜÇÏ´Ù. ¾Æ·¡ÄÚµå´Â integer ¸Þ¸ð¸®¸¦ ÇÒ´çÇϴ°ÍÀ» º¸¿©ÁØ´Ù.
int *pNumber; 
pNumber = (int *)malloc(1000*sizeof(int)); 
 
  1. Æ÷ÀÎÅÍÇü º¯¼öÀÎ pNumber¸¦ ¼±¾ðÇÑ´Ù.
  2. malloc(2)ÇÔ¼ö¸¦ È£ÃâÇØ¼­ intÇü µ¥ÀÌÅ͸¦ 1000°³ ÀúÀåÇÒ ¼ö ÀÖ´Â ¸Þ¸ð¸® °ø°£À» ÇÒ´çÇϰí, ÇÒ´çµÈ ¸Þ¸ð¸® °ø°£ÀÇ ½ÃÀÛÁÖ¼Ò¸¦ pNumber¿¡ ÀúÀåÇÑ´Ù.
  3. 1000 * 4 == 4000byte °¡ ÇÒ´çµÈ´Ù.

C++Àº new¶ó´Â Ű¿öµå¸¦ ÀÌ¿ëÇØ¼­ Á» ´õ Á÷°üÀûÀ¸·Î ¸Þ¸ð¸® ÇÒ´çÀÌ °¡´ÉÇÏ´Ù. µ¿ÀÏÇÑ ÀÏÀ» ÇÏ´Â C++¹öÀüÀÇ ÄÚµå´Ù. ¾ÕÀ¸·Î´Â C++À» ±âÁØÀ¸·Î ¼³¸íÇϵµ·Ï ÇϰڴÙ.
int *pNumber; 
pNumber = new pNumber(1000); 
 

¾Æ·¡´Â double¹öÁ¯ÀÇ ¸Þ¸ð¸® ÇÒ´ç ÄÚµå´Ù.
double *pDouble; 
pDouble = new double; 
 

À̽ÄÀº °°ÀºÇü½ÄÀÌ´Ù, // ÇØ¼® ¹Ù¶÷ -> so you can't really fail with this bit.

µ¿ÀûÇÒ´çÀÌ ¼±¾ðµÈ Áö¿ª º¯¼öµé°ú ´Ù¸¥°Ç, ¾Æ¹«¸® ÇÔ¼ö¿¡¼­ ºüÁ®³ª¿À°Å³ª( return ÇÏ¿´À» °æ¿ì ), ¼±¾ðÇÑ ºí·°À» ºüÁ®³ª¿Ã¶§( {} Scope ¸¦ ¹þ¾î³µÀ» °æ¿ì )¿¡µµ ÇÒ´çÇÑ ¸Þ¸ð¸®°¡ Áö¿öÁöÁö ¾Ê´Â´Ù´Â°ÍÀÌ´Ù.
±×·¡¼­ ¸¸¾à µ¿ÀûÇÒ´çÀ» ÀÌ¿ëÇØ ÀÌ ¿¹Á¦¸¦ ´Ù½Ã ¾µ·Á°í ÇÑ´Ù¸é, ´ÙÀ½°ú°°ÀÌ ÀÛ¼ºÇÒ¼öÀÖ´Ù.

#include <stdio.h> 
 
int *pPointer; 
 
void SomeFunction() 
{ 
    // pPointer Æ÷ÀÎÅÍ¿¡ new integer¸¦ ¸¸µç´Ù 
    pPointer = new int; 
    *pPointer = 25; 
} 
 
void main() 
{ 
    SomeFunction(); // pPointer Æ÷ÀÎÅÍ¿¡ ¹«¾ð°¡¸¦ ¸¸µé¾îÁØ´Ù 
    printf("Value of *pPointer: %dn", *pPointer); 
} 
 

»ý°¢Çϸ鼭 Àо°í, ÄÄÆÄÀÏ·¯°¡ ¾î¶»°Ô ÇÒÁö »ý°¢Çغ¸°í, ¿Ö ÀÌ·¸°Ô ³ª¿À´ÂÁö ÀÌÇØÇØ ºÁ¾ß ÇÑ´Ù.
SomeFunctionÀÌ È£ÃâµÉ¶§, ¸Þ¸ð¸®¸¦ ÇÒ´çÇϰí pPointer Æ÷ÀÎÅÍ¿¡ ÇÒ´çÇÑ ¸Þ¸ð¸®ÀÇ ÁÖ¼Ò¸¦ ³Ñ±ä´Ù.
ÇÔ¼ö°¡ ¸®Åϵɶ§, »õ·Î¿î ¸Þ¸ð¸®´Â ¿ø·¡´ë·Î ³²¾ÆÀÖÀ¸¹Ç·Î pPointer´Â ÀÌ¿ëÇÒ ¼ö ÀÖ°Ô µÇ´Â°ÍÀÌ´Ù.
µ¿ÀûÇÒ´çÀº ¹Ù·Î ÀÌ·± °Í ÀÌ´Ù! ¿Ö ÀÌ ÄÚµå´Â ¿¡·¯°¡ ÀϾÁö ¾Ê´ÂÁö »ý°¢ÇغÁ¶ó.

1.5 ¸Þ¸ð¸®ÀÇ ÇÒ´ç°ú ÇØÁ¦

ÀÌ ¹®Á¦´Â ¸Å¿ì ½±°Ô °íÄ¥¼ö ÀÖ´Â ¹®Á¦Àϼöµµ, º¹ÀâÇÒ ¼öµµ ÀÖ´Ù. ±×·¡µµ ¸í½ÉÇØ¾ß ÇÏ´Â °ÍÀº ÀÌ ¹®Á¦´Â ¸Å¿ì Áß¿äÇÏ´Ù ¶ó´Â °ÍÀÌ´Ù.
¿ì¼± »ý°¢ÇغÁ¾ß µÉ ¹®Á¦´Â µ¿ÀûÇÒ´çÀ» ÀÌ¿ëÇÏ¿© ÇÒ´çÇØ³õÀº ¸Þ¸ð¸®¸¦ »ç¿ë ÈÄ¿¡µµ ±×³É ³öµÖ¹ö¸®´Â Á¡ÀÌ´Ù.
ÀÌ ÇÒ´çµÈ ¸Þ¸ð¸®´Â ½ÇÁ¦ ÀÚµ¿ÀûÀ¸·Î Á¦°ÅµÇÁö ¾ÊÀ¸¹Ç·Î '¸Þ¸ð¸® ´©¼ö°¡ »ý±â°Ô µÇ´Â °ÍÀÌ´Ù.

½ÉÁö¾î ÇÁ·Î±×·¥ÀÌ ³¡³µÀ»¶§¿¡µµ ÄÄÇ»ÅÍ´Â ¸Þ¸ð¸®´Â ÇÒ´çµÈä·Î ³²±â°Ô µÈ´Ù.
ÀÌ ¹®Á¦´Â ÄÄÇ»ÅÍ¿¡°Ô ¸Þ¸ð¸® »ç¿ëÀÌ ³¡³¯¶§ ¾Ë·ÁÁÖÁö ¾Ê´Â´Ù¸é, ´Ù¸¥ ÇÁ·Î±×·¥ÀÌ ÀÌ ¸Þ¸ð¸®¸¦ »ç¿ëÇÒ ¼ö ¾øÀ¸¹Ç·Î ¸Þ¸ð¸®ÀÇ ³¶ºñ°¡ ÀϾ °ÍÀ̰í

¸¸¾à ¸ðµç ¸Þ¸ð¸®¸¦ ½á¹ö¸®°Ô µÇ¸é ½Ã½ºÅÛ Ãæµ¹À» ÀϾ°ÍÀÌ´Ù, ±×·¡¼­ À̰ÍÀº ¸Å¿ì Áß¿äÇÑ ¹®Á¦ÀÌ´Ù.
´ÙÀ½Àº ÇÁ·Î±×·¥ÀÌ Á¾·áµÇ¾úÀ»¶§ ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇØÁÖ´Â ¸Å¿ì °£´ÜÇÑ ¿¹Á¦ÀÌ´Ù

delete pPointer; 
 

°£´ÜÇØ º¸ÀÌÁö¸¸ À̰ÍÀÌ ÀüºÎ´Ù.
ÇÏÁö¸¸ ÇØÁ¦ÇÏ·Á°í ÇÒ ¶§¿¡´Â ÇÒ´çÀ» ÇÑ ½ÃÁ¡¿¡ pPointer º¯¼ö¿¡ È®½ÇÇÑ pointer¸¦ ³Ñ°ÜÁÖ¾ú´ÂÁö üũ¸¦ ÇØ¾ßÇÑ´Ù.
¾²·¹±â °ªÀÌ µé¾îÀÖÀ½À¸·Î ÀÎÇØ À§ÇèÇÒ ¼öµµ ÀÖÁö¸¸, ¸Þ¸ð¸® ÇØÁ¦¸¦ ÇÔÀ¸·Î½á ÇÁ·Î±×·¥Àº º¸´Ù È¿À²ÀûÀÌ°í ¿Ïº®ÇÏ°Ô µÈ´Ù.

Á» ´õ ¹ßÀüÇÏ¿© ¸Þ¸ð¸®¸¦ ³¶ºñÇÏÁö ¾Ê´Â ÄÚµå·Î ÀÛ¼ºµÈ ¿¹Á¦¸¦ ´Ù½Ã º¸ÀÚ.

#include <stdio.h> 
 
int *pPointer; 
 
void SomeFunction() 
{ 
// pPointer Æ÷ÀÎÅÍ¿¡ new interger ¸¦ ¸¸µé¾îÁØ´Ù 
    pPointer = new int; 
    *pPointer = 25; 
} 
 
void main() 
{ 
    SomeFunction(); // pPointer Æ÷ÀÎÅÍ¿¡ ¹«¾ð°¡¸¦ ¸¸µé¾îÁØ´Ù 
    printf("Value of *pPointer: %dn", *pPointer); 
 
    delete pPointer; 
} 
 

Àüü¿¡¼­ Ãß°¡µÈ ÁÙÀº ÇÑ ÁÙÀÌÁö¸¸ ÀÌ ÁÙÀº °¡Àå Áß¿äÇÑ ÁÙÀÌ´Ù.
¸¸¾à ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÏÁö ¾Ê´Â´Ù¸é, '¸Þ¸ð¸® ´©¼öÇö»óÀÌ ÀÏ¾î ³¯ °ÍÀ̰í, ÇÁ·Î±×·¥ÀÌ Á¾·áµÇ±â Àü±îÁö´Â ÀÌ Çö»óÀº ¹Ýº¹ µÉ°ÍÀÌ´Ù.

1.6 ÇÔ¼ö·Î Æ÷ÀÎÅÍ Àü´ÞÇϱâ

Æ÷ÀÎÅ͸¦ ÇÔ¼öÀÎÀÚ·Î Àü´ÞÇÏ´Â ±â¼úÀº ¸Å¿ì À¯¿ëÇϰí, ¸Å¿ì ½±°Ô ¸¶½ºÅÍÇÒ¼öÀÖ´Ù.
¸¸¾à ÇÁ·Î±×·¥¿¡¼­ ¼ö¸¦ °¡Á®°¡ 5¸¦ ´õÇÏ°í ½Í´Ù¸é, ¿ì¸®´Â ´ÙÀ½°ú°°ÀÌ ÀÛ¼ºÇÒ¼ö ÀÖÀ»°ÍÀÌ´Ù.

#include <stdio.h> 
 
void AddFive(int Number) 
{ 
    Number = Number + 5; 
} 
 
void main() 
{ 
    int nMyNumber = 18; 
     
    printf("My original number is %dn", nMyNumber); 
    AddFive(nMyNumber); 
    printf("My new number is %dn", nMyNumber); 
} 
 

±×·¯³ª ¹®Á¦´Â ÀÌ Number ÂüÁ¶·Î AddfiveÇÔ¼öÀÇ ÀÎÀÚ·Î nMyNumber¸¦ ³Ñ°ÜÁÙ ¶§, º¯¼ö ±×ÀÚü°¡ ¾Æ´Ï¶ó´Â Á¡¿¡ÀÖ´Ù.
±×·± ±î´ß¿¡ 'Number = Number + 5' ÀÌÁÙÀº º¹»çµÈ º¯¼ö Number¿¡ 5°¡ ´õÇØÁø´Ù, ¿ø·¡ º¯¼ö´Â in main() ¾È¿¡ ³²°ÜµÎ´Ï ¿µÇâÀÌ ¾ø´Ù.
½ÇÇàÀ» ÇØº¸¸é °á°ú°ªÀ» ¾Ë ¼ö ÀÖÀ»°ÍÀÌ´Ù.

ÀÌ·¯ÇÑ ¹®Á¦¸¦ °¡Áö°í ÀÖÀ»¶§¿¡´Â, º¯¼öÀÇ Æ÷ÀÎÅ͸¦ ³Ñ°ÜÁ༭ ÇÔ¼ö¿¡¼­ ±× ¸Þ¸ð¸®¸¦ °è¼ÓÇÏ¿© ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù. Áï Number °¡ ¾Æ´Ñ Number ÀÇ Æ÷ÀÎÅÍÀÓÀ» »ý°¢Çϰí ÇÔ¼öÀÇ ¿øÇüÀ» ¹Ù²Ù¾î ÁÖ¾î¾ß ÇÑ´Ù.
¹Ù²Ù¾î ÁÖ¾î¾ß ÇÒ Á¡Àº void AddFive(int Number)ÀÌ void AddFive(int* Number) ÀÌ·¸°Ô * ¸¦ ºÙ¿© ¹Ù²Ù¾î Áشٴ °ÍÀÌ´Ù.

ÇÁ·Î±×·¥À» Á¶±Ý ¹Ù²ã ´Ù½Ã ÀÛ¼ºÇغ¸ÀÚ.
±×·³ Number Æ÷ÀÎÅͺ¯¼ö¿¡ nMyNumberÀÇ Æ÷ÀÎÅͰ¡ ³Ñ¾î¿À´Â°¡?
pointer¸¦ ÀÎÀÚ·Î Àü´ÞÇϱâ À§Çؼ­´Â º¯¼öÀÇ ¾Õ¿¡ &±âÈ£¸¦ ºÙ¿©¼­ ³Ñ°ÜÁØ´Ù, ¿ì¸®°¡ ´Ù½Ã ºÎ¸¦¶§ the address of¶ó°í Àд´Ù.

#include <stdio.h> 
void AddFive(int* Number) 
{ 
    *Number = *Number + 5; 
} 
 
void main() 
{ 
    int nMyNumber = 18; 
     
    printf("My original number is %dn", nMyNumber); 
    AddFive(&nMyNumber); 
    printf("My new number is %dn", nMyNumber); 
} 
 

Äڵ带 ÀÛ¼ºÇÏ¿© ½ÇÇàÀ» ÇØº¸°í ¿ÏÀüÇÑ ³ÊÀǰÍÀ¸·Î ¸¸µé¾î¾ß ÇÑ´Ù.
±×·³ ¿©±â¼­ Áú¹® ÇØº¸°Ú´Ù. AddFive ÇÔ¼ö¾È¿¡ Number ¾Õ¿¡ *°¡ Áß¿äÇѰ¡?

´äÀº ÀÌ *ÀÌ Numberº¯¼ö¿¡ ÀúÀåµÈ pointer ÀÌ Àڽſ¡ 5¸¦ ´õÇÏ´Â °Ô ¾Æ´Ñ, Number º¯¼ö¿¡ ÀúÀåµÈ pointer °¡ °¡¸£Å°´Â °÷ÀÇ ¼ýÀÚ¿¡ 5¸¦ ´õÇ϶ó´Â °ÍÀ» ÄÄÇ»ÅÍ¿¡°Ô ¾Ë·ÁÁֱ⠶§¹®¿¡ ÇÊ¿äÇÏ´Ù´Â °ÍÀÌ´Ù.

¸¶Áö¸·À¸·Î »ý°¢ÇØÁà¾ß ÇÒ °ÍÀº ¸®ÅÏÇüÀ» Æ÷ÀÎÅÍ·Î ÁÖ°í ½Í´Ù¸é ´ÙÀ½°ú°°ÀÌ ÇØ¾ßµÉ °ÍÀÌ´Ù :

int * MyFunction(); 
 

ÀÌ ¿¹Á¦´Â MyFunction ¸®ÅϰªÀÌ integerÇü Æ÷ÀÎÅÍÀÌ´Ù.

1.7 Ŭ·¡½º Æ÷ÀÎÅÍ


¿©±â¼­ ¸»ÇÒ°Í Àº ¿©·¯°³ÀÇ º¯¼ö³ª ÇÔ¼ö°¡ Àִ°ÍÀ» ±¸Á¶Ã¼³ª Ŭ·¡½º·Î ¹­¾î Æ÷ÀÎÅÍ·Î ÀÌ¿ëÇϴ°ÍÀÌ´Ù. class ¼±¾ðÀº ´ÙÀ½°ú°°´Ù.

class MyClass 
{ 
public: 
    int m_Number; 
    char m_Character; 
}; 
 

±×¸®°í MyClassŸÀÔ º¯¼ö¸¦ ´ÙÀ½°ú°°ÀÌ ¼±¾ðÇÑ´Ù.

MyClass thing; 
 

¸¸¾à ÀÌ °ÍÀ» ¸ð¸£°Ú´Ù¸é, À­ ºÎºÐ ºÎÅÍ ´Ù½Ã Àо±æ ¹Ù¶õ´Ù.

MyClass Æ÷ÀÎÅÍ º¯¼öÀÇ ¼±¾ðÀº ´ÙÀ½°ú°°ÀÌ ÇÑ´Ù :

MyClass *thing; 
 

ÀÌ·¸°Ô ÇÏ¸é Æ÷ÀÎÅÍ º¯¼ö°¡ ¼±¾ðµÈ´Ù.
±×¸®°í, ³Ê´Â ¸Þ¸ð¸®¸¦ ÇÒ´çÇÑ ´ÙÀ½¿¡ pointer º¯¼ö¿¡ ³Ñ°ÜÁà¾ß ÇÒ °ÍÀÌ´Ù.

thing = new MyClass; 
 

ÀÌ·¸°Ô ÇÏ¸é »ý±â´Â ¹®Á¦´Â '¾î¶»°Ô Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇÒ °ÍÀΰ¡?' ÀÌ´Ù.
º¸Åë class ÀÇ ¸â¹ö¿¡ Á¢±ÙÇϱâ À§Çؼ­´Â thing.m_Number ¶ó°í ¾µ°ÍÀÌ´Ù. ÇÏÁö¸¸ ÀÌ Á¢±Ù ¹æ¹ýÀº Á¦´ë·Î µÈ °ÍÀÌ ¾Æ´Ï´Ù.
¿Ö³ÄÇϸé thing Æ÷ÀÎÅÍ º¯¼ö´Â ½ÇÁ¦ °´Ã¼°¡ ¾Æ´Ñ Æ÷ÀÎÅÍÀ̱⠶§¹®ÀÌ´Ù.
m_Number º¯¼ö¸¦ ºÒ·¯¿Ã¼ö ÀÖ°Ô ÇØº¸ÀÚ.

ÀÌ °ÍÀº m_Number¸¦ °¡Áö°í ÀÖ´Â ±¸Á¶Ã¼À̰í, ±× Á¡ ¶§¹®¿¡ Á¶±Ý ´Ù¸¥ ±ÔÄ¢À» ÀÌ¿ëÇØ¾ß ÇÑ´Ù.
.(dot) À» ->(dash µÚ¿¡ > Å©´Ù ¶ó´Â ±âÈ£¸¦ ºÙÀÎ ±âÈ£)·Î ¹Ù²Ù°í ¹Ù²Û ¿¹Á¦¸¦ º¸ÀÚ.

class MyClass 
{ 
public: 
    int m_Number; 
    char m_Character; 
}; 
 
void main() 
{ 
    MyClass *pPointer; 
    pPointer = new MyClass; 
 
    pPointer->m_Number = 10; 
    pPointer->m_Character = 's'; 
 
    delete pPointer; 
} 
 

1.8 ¹è¿­ÀÇ Æ÷ÀÎÅÍ

À§¿¡¼­ ¼³¸íÇÑ°Íµé »Ó¸¸ ¾Æ´Ï¶ó ¹è¿­À» °¡¸£Å°´Â ÁÖ¼Ò Æ÷ÀÎÅÍ ¶ÇÇÑ ¸¸µé¼öÀÖ´Ù, ÀÌ ¿¹Á¦¸¦ º¸ÀÚ.

int *pArray; 
pArray = new int[6]; 
 

À̰ÍÀº pArray Æ÷ÀÎÅ͸¦ »ý¼ºÇϰí 6°³ÀÇ ¿ä¼Ò¸¦ °¡Áø ¹è¿­ÀÇ ÁÖ¼Ò·Î ¸¸µé¾îÁØ´Ù.
µ¿ÀûÇÒ´çÀ» ÀÌ¿ëÇÏÁö ¾Ê°í ´Ù¸¥¹æ¹ýÀ¸·Î ÇÒ¼öµµ ÀÖ´Ù.

int *pArray; 
int MyArray[6]; 
pArray = &MyArray[0]; 
 

À̰ÍÀº &MyArryay[0]·Î ¾µ¼öµµ ÀÖ°í, °£´ÜÈ÷ MyArray¸¦ ¾µ¼öµµ ÀÖ´Ù.
À̰ÍÀº ´ÜÁö ¹è¿­À» Àû¿ë½ÃŰ´Â c/c++¾ð¾îÀÇ ¹æ¹ýÀÏ»ÓÀÌ´Ù

ÀϹÝÀûÀÎ ÇÔÁ¤Àº pArray = &Myarray; ·Î ¾²´Â°ÍÀε¥ ÀÌ °ÍÀº ¿Ã¹Ù¸£Áö ¾Ê´Â Ç¥ÇöÀÌ´Ù.
¸¸¾à ÀÌ·¸°Ô ½è´Ù¸é, (ŸÀÔÀÌ ¾ø´Â) ¹è¿­ÀÇ ÁÖ¼Ò¸¦ °¡¸£Å°´Â Æ÷ÀÎÅÍ·Î ½á¹ö¸± °ÍÀÌ´Ù, ÀÌ Ç¥ÇöÀº ¿øÇÏ´Â ´ë·Î ÀÛµ¿ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.

1.9 ¹è¿­ÀÇ Æ÷ÀÎÅÍ ÀÌ¿ëÇϱâ

¸¸¾à ¹è¿­ÀÇ Æ÷ÀÎÅ͸¦ °¡Áö°Ô µÇ¾ú´Ù¸é, ¾î¶»°Ô À̰ÍÀ» ÀÌ¿ëÇØ¾ß µÉ±î?
ÀÚ, intÇüÀÇ ¹è¿­À»°¡Áø Æ÷ÀÎÅ͸¦ ¸»Çغ¸¾Æ¶ó.

Æ÷ÀÎÅÍ´Â ÃʱâÈ­µÈ ¹è¿­À» óÀ½ºÎÅÍ °¡Áö°íÀÕÀ»°ÍÀÌ´Ù, ¾Æ·¡ ¿¹Á¦¸¦ º¸ÀÚ :

#include <stdio.h> 
 
void main() 
{ 
    int Array[3]; 
    Array[0] = 10; 
    Array[1] = 20; 
    Array[2] = 30; 
 
    int *pArray; 
    pArray = &Array[0]; 
 
    printf("pArray points to the value %dn", *pArray); 
} 
 

¸¸µé¾îÁø Æ÷ÀÎÅͰ¡ ¹è¿­¿¡¼­ ´Ù¸¥ ¿ä¼Ò¸¦ °¡¸£Å°°Ô ÇÏ°í ½Í´Ù¸é, pArray++ ¶ó°í ÇÏ¸é µÈ´Ù.
±×·³ ÀÌÁ¦ pArray + 1 °ú °°Àº pArray++ °ú ºñ½ÁÇÑ pArryay + 2 ¸¦ ÃßÃøÇÒ¼öÀÖÀ»°ÍÀÌ´Ù, À̰ÍÀº Æ÷ÀÎÅ͸¦ ¹è¿­ÀÇ ¿ä¼Ò¸¦ µÎ¹øÂ° ¿È°ÜÁÙ °ÍÀÌ´Ù.

¿©±â¼­ ÁÖÀÇÇØ¾ßÇÒ°ÍÀº ¹è¿­ÀÇ ¹üÀ§ (¿¹Á¦¿¡¼­´Â 3)À» ¹þ¾î³ª¸é ¾ÈµÈ´Ù´Â °ÍÀÌ´Ù.
¿Ö³ÄÇϸé ÄÄÆÄÀÏ·¯´Â Æ÷ÀÎÅ͸¦ ¾µ ¶§ ¹è¿­ÀÇ ³¡¿¡ ¿Ô´ÂÁö üũÇÏÁö ¸øÇϱ⠶§¹®ÀÌ´Ù.
±×·³ ½±°Ô ÀÌ ¹æ¹ýÀ» ¾µ¼ö ÀÖÀ» °ÍÀÌ´Ù.
¿¹Á¦¸¦ ´Ù½Ã º¸ÀÚ. ¿ì¸®°¡ ÁöÁ¤ÇÑ 3°³ÀÇ º¯¼ö¸¦ Ãâ·ÂÇØÁØ´Ù :

#include <stdio.h> 
 
void main() 
{ 
    int Array[3]; 
    Array[0] = 10; 
    Array[1] = 20; 
    Array[2] = 30; 
 
    int *pArray; 
    pArray = &Array[0]; 
 
    printf("pArray points to the value %dn", *pArray); 
    pArray++; 
    printf("pArray points to the value %dn", *pArray); 
    pArray++; 
    printf("pArray points to the value %dn", *pArray); 
} 
 

pArray Æ÷ÀÎÅÍ º¯¼ö¸¦ »¬ ¼öµµÀÖ´Ù.
ÀϹÝÀûÀÎ Æ÷ÀÎÅÍÀÇ pArray·ÎºÎÅÍ pArray - 2 ´Â 2¹øÂ° ¾ÕÀÇ ¿ä¼Ò¸¦ °¡¸£Å²´Ù.
¿©±â¼­ ´õÇϰųª »©´Â°ÍÀº Æ÷ÀÎÅÍ º¯¼öÀÌÁö ¹è¿­ÀÇ °ªÀÌ ¾Æ´Ï´Ù.
Æ÷ÀÎÅÍÀÇ ¸î Á¶ÀÛµé°ú ¹è¿­ÀÇ »ç¿ëÀº ´ëºÎºÐ ¹«¾ð°¡¸¦ ãÀ»¶§ ¹Ýº¹¹®¿¡¼­ ÁÖ·Î »ç¿ëµÈ´Ù.

±×¸®°í Æ÷ÀÎÅÍÀÇ °ªµµ int* pNumberSet¿Í °°ÀÌ °¡Á®¿Ã ¼ö ÀÖ´Ù.
¹è¿­À» ´Ù·ç¾î º¸¾ÒÀ» °ÍÀÌ´Ù. ¸¸¾à Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇÑ ¹è¿­ÀÇ °ªÀ» °¡Á®¿Ã ¼öµµ ÀÖ´Ù.
pNumberSet[0] ´Â *pNumberSet¿Í °°Àº ¶æÀÌ´Ù. ±×¸®°í pNumberSet[1]´Â *( pNumberSet + 1 ) ¿Í °°Àº ¶æÀÌ´Ù.

¹è¿­¿¡¼­ ¸¶Áö¸·À¸·Î Á¶½ÉÇØ¾ßÇÒ °ÍÀº, ¸¸¾à ¹è¿­À» ÀÌ¿ëÇϱâÀ§ÇØ new Ű¿öµå·Î ¸Þ¸ð¸®ÇÒ´çÀ» ÇØÁÖ¾ú´Ù¸é ¿¹Á¦¿Í °°ÀÌ ÇØÁÖ¾î¾ßÇÑ´Ù.

int *pArray; 
pArray = new int[6]; 
delete [] pArray; 
 

[] µÚ¿¡ ÀÖ´Â ¹è¿­À» Á¦°Å ÇØÁÖ°Ú´Ù´Â °ÍÀÌ´Ù.
ÄÄÆÄÀÏ·¯¿¡°Ô Áö¿ì´Â °ÍÀÌ ¹è¿­À̰í ÇϳªÀÇ item¾Æ´Ï¶ó´Â°ÍÀ» ¸»ÇØÁØ´Ù.
¸¸¾à À̹æ¹ýÀ» ²À ÀÌ¿ëÇÏÁö ¾Ê´Â´Ù¸é '¸Þ¸ð¸® ´©¼öÇö»óÀÌ ÀϾ °ÍÀÌ´Ù.

new Ű¿öµå¸¦ ÀÌ¿ëÇØ¼­ ÇÒ´çÇÏÁö ¾Ê¾Ò´Ù¸é ¸Þ¸ð¸® ÇØÁ¦¸¦ ÇÒ Çʿ䰡 ¾ø´Ù.
void main() 
{ 
    int number; 
    int *pNumber = number; 
    delete pNumber; // wrong - *pNumber´Â new Ű¿öµå·Î ÇÒ´çµÇÁö ¾Ê¾Ò´Ù 
} 
 

2 FAQ

2.1 new¿Í delete¸¦ ¾²·Á´Âµ¥ ¿Ö 'symbol undefined' ¿¡·¯°¡ ³ª³ª¿ä?

´ëºÎºÐ C++·Î ÀÛ¼ºµÈ ¼Ò½ºÄڵ带 C ÄÄÆÄÀÏ·¯¸¦ ÀÌ¿ëÇØ¼­ ÄÄÆÄÀÏ ÇÒ¶§ ¹ß»ýÇÑ´Ù. new¿Í delete ¿¬»êÀÚ´Â C++¸¸ÀÌ °¡Áö°í ÀÖÀ¸¸ç, C ÄÄÆÄÀÏ·¯´Â ÀÌµé ¿¬»êÀÚ¸¦ ÀνÄÇÏÁö ¸øÇÑ´Ù.

ÀÌ ¹®Á¦´Â C++ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇÏ´Â °ÍÀ¸·Î ÇØ°áÇÒ ¼ö ÀÖ´Ù.

2.2 new¿Í mallocÀÌ ¾î¶»°Ô ´Ù¸£³ª¿ä?

newŰ¿öµå´Â c++ ¸í¼¼¿¡ Æ÷ÇԵǾî ÀÖ´Ù. ±×·¡¼­ µ¿Àû¸Þ¸ð¸®¸¦ ¸¸µå´Â Ç¥Áعæ¹ý(À̿ܿ¡ À©µµ¿ì ¸Þ¸ð¸®ÇÒ´ç ·çÆ¾À» ÀÌ¿ëÇÏ´Â)ÀÌ´Ù.

c++ ÀÀ¿ë ÇÁ·Î±×·¥À» ÀÛ¼ºÇϴµ¥ À־ malloc()¸¦ »ç¿ëÇÒ ÇÊ¿ä´Â ¾ø´Ù. ³Ê´Â c c++ ÀÀ¿ëÇÁ·Î±×·¥¿¡¼­ malloc ÀÇ ÀÌ¿ëÀº Àý´ëÀûÀ¸·Î ÇÊ¿äÇÏÁö ¾Ê´Â´Ù

¿Ö³ÄÇϸé mallocÀº c++ÀÇ °´Ã¼ÁöÇâÀûÀΠƯ¡ÀÌ ¾Æ´Ï±â ¶§¹®ÀÌ´Ù new¸¦ ÀÌ¿ëÇϸé Ŭ·¡½ºµéÀ» ÇÒ´çµÈ ¸Þ¸ð¸®´Â Ŭ·¡½º»ý¼ºÀÚ¸¦ È£ÃâÇØ ¿¹¹æÇÑ´Ù, ´ÜÁö ÀÌÇϳªÀÇ ¿¹¿¡¼­µµ ¹®Á¦°¡ ÀϾ´Ù.

malloc °ú free»ç¿ë½Ã ÀϾ´Â ¹®Á¦ÀÇ °á°ú¿¡¼­ ó·³ mallocÀÇ ¸ñÀû°ú Àǵµ´Â ¾µ¸ð¾ø¾îÁ³±â¶§¹®¿¡ ÀÌ ±Û¿¡¼­ ±×°Í¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ À̾߱âµéÀ» ´Ù·çÁö ¾Ê´Â´Ù.
À̰ÍÀº C++ÀÇ °æ¿ìÀ̰í C¿¡¼­´Â ¿©ÀüÈ÷ malloc()ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ ¸Þ¸ð¸® ÇÒ´çÀÌ Áß¿äÇÏ°Ô »ç¿ëµÈ´Ù. ¶ÇÇÑ ¿©·¯°¡Áö ÀÌÀ¯·Î C++À» »ç¿ëÇÏ´õ¶óµµ new ´ë½Å malloc¸¦ »ç¿ëÇϱ⵵ ÇÑ´Ù.

2.3 free ¿Í delete¸¦ °°ÀÌ »ç¿ëÇØµµ µÇ³ª¿ä?

¸Þ¸ð¸®¸¦ ÇÒ´çÇÑ ·çƾ°ú µ¿ÀÏÇÑ ·çƾÀ» »ç¿ëÇØ¼­ ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇØ ÁÖ¾î¾ß ÇÑ´Ù. ¿¹¸¦µé¾î free()´Â malloc()À¸·Î ÇÒ´çÇÑ ¸Þ¸ð¸®¸¦ ÇØÁ¦ ÇÒ¶§¸¸ À¯È¿Çô, delete´Â new·Î ÇÒ´çÇÑ ¸Þ¸ð¸®ÀÇ ÇØÁ¦¿¡¸¸ À¯È¿ÇÏ´Ù.

ÀÚ¹Ù½§Å°
malloc°ú free·Î °´Ã¼ »ý¼º/Á¦°Å ÇÏ½Ã¸é »ý¼ºÀÚ¿Í ¼Ò¸êÀÚ°¡ ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù.
¶ÇÇÑ malloc°ú free´Â cpp¶óÀ̺귯¸®ÀÇ ÀϺκÐÀÌ ¾Æ´Õ´Ï´Ù. cpp¿¡¼­ÀÇ »ç¿ëÀº ±ÇÀåµÇÁö ¾Ê´Â°Í °°½À´Ï´Ù

2.4 ÂüÁ¶

À̱ÛÀº ÂüÁ¶¿¡ ´ëÇÑ ³»¿ëÀ» °ÅÀÇ ´Ù·ç°í ÀÖÁö ¾Ê´Ù. ±×·¯³ª, ¸¹Àº»ç¶÷µéÀÌ À̰Ϳ¡ ´ëÇØ Áú¹®Çϴ°ÍÀ» º¸¾Ò´Ù. °£´ÜÈ÷ ¾ê±âÇØ º¸ÀÚ¸é ÂüÁ¶´Â Æ÷ÀÎÅÍ¿Í ºñ½ÁÇÑ ¸ñÀûÀ¸·Î »ç¿ëÇϱâ À§ÇÑ °£´ÜÇÑ ´ë¾ÈÁß¿¡ ÇϳªÀÌ´Ù. ÂüÁ¶ÀÇ °³³äÀ¸·Î Æ÷ÀÎÅ͸¦ ¹Ù¶óº»´Ù¸é, & ¸¦ 'the address of' ¶ó°í ÀÐÁö¾Ê°í 'a reference to' ¶ó°í ÀÐÀ» ¼ö ÀÖ´Ù.

ÂüÁ¶´Â Æ÷ÀÎÅÍ¿Í °°´Ù. ÀÚµ¿À¸·Î ¿ªÂüÁ¶°¡ µÇ´Â°ÍÀ» »©°í¸»ÀÌ´Ù. ¾Æ·¡ÀÇ Äڵ忡¼­ pNumberÀÇ Æ÷ÀÎÅÍ´Â myOtherNumberÀÇ Æ÷ÀÎÅÍ¿Í °°´Ù.
int* pNumber = &myOtherNumber; 
*pNumber = 25; 
 
Æ÷ÀÎÅÍ¿Í ÂüÁ¶ÀÇ ´Ù¸¥ Â÷ÀÌÁ¡À̶ó¸é ÂüÁ¶´Â Æ÷ÀÎÅÍó·³ ³ªÁß¿¡ ¼±¾ðÀ» ¹Ù²ÙÁö¾Ê´Â 'ÀçÁöÁ¤'ÇÏÁö ¾Ê¾Æµµ µÈ´Ù´Â Á¡ÀÌ´Ù.

¿¹¸¦µé¾î ´ÙÀ½ÄÚµåÀÇ °á°ú´Â '20'ÀÌ ³ª¿Ã°ÍÀÌ´Ù :
int myFirstNumber = 25; 
int mySecondNumber = 20; 
int &myReference = myFirstNumber; 
 
myReference = mySecondNumber; 
 
printf("%d", myFristNumber); 
 

Ŭ·¡½ºÀ϶§, º§·ù´Â ´ÙÀ½°ú°°Àº ±¸Á¶·Î ÂüÁ¶·Î º¯¼ö¸¦ ¼³Á¤ÇÒ¼öÀÖ´Ù :
CMyClass::CMyClass(int &variable) : m_MyReferenceInCMyClass(variable) 
{ 
    // Äڵ带 ¿©±â¿¡ ÀÛ¼ºÇÑ´Ù 
} 
 

ÇÔ¼ö¶ó¸é ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÉ °ÍÀÌ´Ù.
#include <stdio.h>  
 
void e2(int &a) -- Ä¿ÇÃ´Ô ¸»¿¡ µû¶ó ¼öÁ¤ 
{ 
  a = a * 2; 
} 
int main() 
{ 
  int value=3; 
  e2(value); 
  printf("%d\n", value); 
} 
 

3 Á¤¸®

ÀÌ ¹®¼­¸¦ ÀÐÀ¸¸é Æ÷ÀÎÅ͸¦ ÀÌÇØÇϴµ¥ ¾î·Á¿òÀ» ´À³¢Áö ¾Ê´Â ¼öÁØ¿¡ ¿Ã¶ó¼³ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·¯³ª ÃÖ¼ÒÇÑ µÎ¹ø ÀÌ»óÀº ºÁ¾ß ÇÒ °ÍÀÌ´Ù. ¸¹Àº »ç¶÷µéÀÌ Çѹø¿¡ ÀÌÇØÇϱâ´Â Èûµå¸®¶ó »ý°¢µÈ´Ù. ´ÙÀ½Àº ¿©±â¿¡¼­ ´Ù·é ³»¿ëÁß ÇÙ½ÉÀ̶ó ÇÒ ¸¸ÇÑ °ÍµéÀÌ´Ù.

  • Æ÷ÀÎÅÍ´Â ¸Þ¸ð¸®¿µ¿ªÀÇ ÁÖ¼Ò¸¦ ´ã´Â º¯¼öÀÌ¸ç º¯¼öÀ̸§¾Õ¿¡ * ¸¦ ºÙÀ̸éµÈ´Ù (¿¹, nt *number)
  • º¯¼öÀÇ ÁÖ¼Ò¸¦ ¾ò°í½ÍÀ»¶§´Â & ±âÈ£¸¦ ¾Õ¿¡ ºÙÀ̸éµÈ´Ù (¿¹, pNumber = &my_numbe).
  • ±âÈ£´Â ¼±¾ðÀ϶§¸¦ Á¦¿ÜÇϰí (int *number ¿Í°°Àº) 'the memory location pointed to by' ¶ó°í Àд´Ù.
  • & ±âÈ£´Â, ¼±¾ðÀ϶§¸¦ Á¦¿ÜÇϰí(int &number¿Í°°Àº) 'the address of' ¶ó°í Àд´Ù.
  • ¸Þ¸ð¸®¸¦ ÇÒ´çÇÒ¶§´Â 'new'Ű¿öµå¸¦ ÀÌ¿ëÇÒ¼öÀÖ´Ù. °´Ã¼¿¡ ´ëÇÑ ¸Þ¸ð¸® ÇÒ´çÀÌ ¾Æ´Ï¶ó¸é malloc()¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.
  • Æ÷ÀÎÅÍ´Â °°Àº ŸÀÔÀÇ Æ÷ÀÎÅÍ¿¡ ´ëÇØ¼­¸é ÇÒ´çµÇ¾îÁú ¼ö ÀÖ´Ù. ¿¹¸¦µé¾î int *number ´Â class *Myclass¸¦ °¡¸®Å³ ¼ö ¾ø´Ù.
  • ÇÔ¼ö¸¦ Æ÷ÀÎÅÍ·Î ³Ñ±æ ¼öµµ ÀÖ´Ù.
  • malloc()·Î ÇÒ´çÇÑ ¸Þ¸ð¸®´Â free()¸¦ new·Î ÇÒ´çÇÑ ¸Þ¸ð¸®´Â delete¸¦ ¾´´Ù.
  • ÀÌ¹Ì Á¸ÀçÇÏ´Â ¹è¿­ÀÇ ÁÖ¼Ò¸¦¾ò°í½Í´Ù¸é &array[0].
  • µ¿ÀûÇÒ´çÇÑ ¹è¿­À» ÇØÁ¦ÇÏ°í ½Í´Ù¸é delete[] ¸¦ ÀÌ¿ëÇØ¾ßµÈ´Ù, ±×³É delete¸¦ ½á¼± ¾ÈµÈ´Ù.
    new¿Í delete¸¦ ÀÌ¿ëÇØ¼­ °´Ã¼¼öÁØ¿¡¼­ ¸Þ¸ð¸® ÇÒ´çÀ» ´Ù·ç±â ¶§¹®¿¡ ¾ò´Â Æí¸®ÇÔÀÌ´Ù. ¸¸¾à malloc()¸¦ ÀÌ¿ëÇØ¼­ 2Â÷¿ø¹è¿­¿¡ ´ëÇÑ ¸Þ¸ð¸®¸¦ ÇÒ´çÇß´Ù¸é, ·çÇÁ¸¦ µ¹¸é¼­ ÇϳªÇϳª¾¿ free()ÇØÁÖ¾î¾ß ÇÒ °ÍÀÌ´Ù.

À̰ÍÀº Æ÷ÀÎÅÍ¿¡ ´ëÇÑ ¿Ïº®ÇÑ °¡À̵尡 ¾Æ´Ï´Ù. Á¦¸ñ±×´ë·Î Ãʺ¸ÀÚ¸¦ À§ÇÑ °£´ÜÇÑ Á¤º¸µé¸¸ ´ã°í ÀÖ´Ù. ÀÌÁ߯÷ÀÎÅÍ¿Í À̵éÀÇ ÀÀ¿ë, ÇÔ¼öÆ÷ÀÎÅ͵鿡 ´ëÇØ¼­´Â ÀÚ¼¼È÷ ´Ù·ç°í ÀÖÁö ¾Ê´Ù.

4 Âü°í¹®¼­µé


CategoryLanguage CategoryC

5 Comment

Ä¿Çà 2007/01/25 11:40:14
2.4¹ø ÂüÁ¶¿¡¼­ Ãß°¡ÇϽŠe2() ÇÔ¼ö´Â ÂüÁ¶³»¿ëÀÌ´Ï Æ÷ÀÎÅͰ¡ ¾Æ´Ñ ÂüÁ¶·Î ¹Þ´Â ÀÎÀÚÇüŸ¦ ¸¸µé¾îÁà¾ßÇÏÁö ¾ÊÀ»±î¿ä?
yundream 2007/01/31 11:50:21
°¨»ç.. ±×·±µ¥ ÀÌ¹Ì ¹Ù²ã ³õ¾Ò³×¿ä.

Name:  

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.