const¸¦ Æ÷ÀÎÅÍ¿Í ÇÔ²² »ç¿ëÇϸé È¿°ú°¡ Á¶±Ý ´Þ¶óÁø´Ù. ´ÙÀ½ ¿¹Á¦´Â Æ÷ÀÎÅÍ¿Í constÀÇ °ü°è¸¦ ½ÇÇèÇØ º¸±â À§ÇØ ÀÛ¼ºÇߴµ¥ ÄÄÆÄÀÏÇØ º¸¸é ¸î ±ºµ¥¼ ¿¡·¯°¡ ¹ß»ýÇÒ °ÍÀÌ´Ù.
¿¹ Á¦ : ConstPointer |
#include <Turboc.h>
void main()
{
int ar[5]={1,2,3,4,5};
int *pi1=&ar[0];
pi1++; // Æ÷ÀÎÅÍ°¡ ´Ù¸¥ ´ë»óü¸¦ °¡¸®Å³ ¼ö ÀÖ´Ù.
*pi1=0; // ´ë»óü¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù.
const int *pi2=&ar[0];
pi2++; // Æ÷ÀÎÅÍ°¡ ´Ù¸¥ ´ë»óü¸¦ °¡¸®Å³ ¼ö ÀÖ´Ù.
*pi2=0; // ¿¡·¯ : ´ë»óü°¡ »ó¼öÀ̹ǷΠº¯°æÇÒ ¼ö ¾ø´Ù.
int * const pi3=&ar[0];
pi3++; // ¿¡·¯ : Æ÷ÀÎÅÍ°¡ ´Ù¸¥ ´ë»óü¸¦ °¡¸®Å³ ¼ö ¾ø´Ù.
*pi3=0; // ´ë»óü´Â º¯°æÇÒ ¼ö ÀÖ´Ù.
const int * const pi4=&ar[0];
pi4++; // ¿¡·¯ : Æ÷ÀÎÅÍ°¡ ´Ù¸¥ ´ë»óü¸¦ °¡¸®Å³ ¼ö ¾ø´Ù.
*pi4=0; // ¿¡·¯ : ´ë»óü°¡ »ó¼öÀ̹ǷΠº¯°æÇÒ ¼ö ¾ø´Ù.
}
Á¤¼öÇü ¹è¿ arÀÌ ¼±¾ðµÇ¾î ÀÖ°í ÀÌ ¹è¿À» °¡¸®Å°´Â Æ÷ÀÎÅÍ 4°³¸¦ ¼±¾ðÇϴµ¥ constÀÇ À§Ä¡¿¡ µû¶ó »ó¼ö°¡ µÇ´Â ´ë»óÀÌ Á¶±Ý¾¿ ´Þ¶óÁø´Ù. ¸ÕÀú const¸¦ ¾²Áö ¾ÊÀº ÀϹÝÀûÀÎ Æ÷ÀÎÅÍ pi1À» º¸ÀÚ. pi1Àº ar[0]ÀÇ ¹øÁö, ±×·¯´Ï±î ar ¹è¿ÀÇ Ã¹ ¹ø° ¿ä¼Ò¸¦ °¡¸®Å°°í ÀÖ´Ù. ÀÌ »óÅ¿¡¼ pi1À» Áõ°¡½ÃÅ°¸é ¹è¿ÀÇ ´Ù¸¥ ¿ä¼Ò¸¦ °¡¸®Å°µµ·Ï À̵¿Çϸç *pi1¿¬»ê½ÄÀ¸·Î pi1ÀÌ °¡¸®Å°´Â °÷ÀÇ °ªÀ» Àаųª ¹Ù²Ü ¼ö ÀÖ´Ù. pi1 Æ÷ÀÎÅÍ ÀÚüµµ »ó¼ö°¡ ¾Æ´Ï¸ç pi1ÀÌ °¡¸®Å°´Â ´ë»óüµµ »ó¼ö°¡ ¾Æ´Ï¹Ç·Î ¾çÂÊ ¸ðµÎ ¿øÇϴ´ë·Î º¯°æ °¡´ÉÇÏ´Ù.
´ÙÀ½Àº const int * ŸÀÔÀ¸·Î ¼±¾ðµÈ pi2¸¦ º¸ÀÚ. ÀÌ Æ÷ÀÎÅÍ´Â const int¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ º¯¼ö·Î ¼±¾ðµÇ¾úÀ¸¹Ç·Î ÀÌ Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â ´ë»óü´Â Á¤¼öÇü »ó¼öÀ̸ç Æ÷ÀÎÅÍ ÀÚü´Â »ó¼ö°¡ ¾Æ´Ï´Ù. ±×·¡¼ pi2++À̳ª pi2-- ¶Ç´Â pi2¿¡ ´Ù¸¥ ´ë»óüÀÇ ¹øÁö¸¦ Á÷Á¢ ´ëÀÔÇÏ¿© pi2°¡ ´Ù¸¥ ´ë»óü¸¦ °¡¸®Å°µµ·Ï ÇÒ ¼ö´Â ÀÖÁö¸¸ *pi2¸¦ º¯°æÇÏ´Â °ÍÀº Çã¶ôµÇÁö ¾Ê´Â´Ù. »ó¼ö¸¸ °¡¸®Å°´Â Æ÷ÀÎÅÍ·Î ¼±¾ðµÇ¾ú±â ¶§¹®¿¡ ÀÌ Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â °÷ÀÇ ³»¿ëÀ» º¯°æÇÒ ¼ö ¾ø´Ù. ÀÌ·± Æ÷ÀÎÅ͸¦ »ó¼ö Áö½Ã Æ÷ÀÎÅÍ(Pointer to Constant)¶ó°í ÇÑ´Ù.
¹°·Ð pi2°¡ °¡¸®Å°°í ÀÖ´Â ar ¹è¿ ÀÚü´Â »ó¼ö°¡ ¾Æ´Ï¹Ç·Î ar[0]=0;¿Í °°ÀÌ Á÷Á¢ ÀÌ ¹è¿ ¿ä¼Ò¿¡ °ªÀ» ´ëÀÔÇÏ´Â °ÍÀº °¡´ÉÇÏ´Ù. ÇÏÁö¸¸ pi2 Æ÷ÀÎÅÍ·Î °£Á¢ÀûÀ¸·Î ¹è¿ ¿ä¼ÒÀÇ °ªÀ» º¯°æÇÒ ¼ö´Â ¾ø´Ù. »ó¼ö Áö½Ã Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â °÷ÀÇ ³»¿ëÀº »ó¼ö·Î Ãë±ÞµÇ¹Ç·Î ÀÌ Æ÷ÀÎÅ͸¦ »ç¿ëÇÏ¿© °ªÀ» ¹Ù²Ù´Â °ÍÀº ¿¡·¯·Î 󸮵ȴÙ.
´ÙÀ½Àº const ¿¹¾à¾î°¡ Æ÷ÀÎÅÍ º¯¼ö ¾Õ¿¡ »ç¿ëµÈ pi3¸¦ º¸ÀÚ. int * const pi3·Î ¼±¾ðµÇ¾î Àִµ¥ ÀÌ ¼±¾ð¹®Àº pi3 Æ÷ÀÎÅÍ º¯¼ö¸¦ »ó¼ö·Î ¸¸µç´Ù. ÀÌ·± Æ÷ÀÎÅ͸¦ »ó¼ö Æ÷ÀÎÅÍ(Constant Pointer)¶ó°í ÇÏ¸ç º¯¼ö ÀÚü°¡ »ó¼öÀ̹ǷΠ´Ù¸¥ ´ë»óü¸¦ °¡¸®Å³ ¼ö ¾øÁö¸¸ ÀÌ Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â ´ë»óü´Â »ó¼ö°¡ ¾Æ´Ï¹Ç·Î ´ë»óüÀÇ °ªÀ» º¯°æÇÏ´Â °ÍÀº °¡´ÉÇÏ´Ù.
¸¶Áö¸· 4¹ø° ¿¹ pi4´Â const°¡ ´ë»óü¿Í Æ÷ÀÎÅÍ º¯¼ö¿¡ ¸ðµÎ »ç¿ëµÇ¾ú´Âµ¥ ÀÌ·¸°Ô ¼±¾ðÇϸé Æ÷ÀÎÅÍ º¯¼ö ÀÚüµµ »ó¼öÀÌ°í ´ë»óüµµ »ó¼ö·Î Ãë±ÞµÈ´Ù. À̸§À» ºÙÀÌÀÚ¸é »ó¼ö Áö½Ã »ó¼ö Æ÷ÀÎÅͶó°í ÇÒ ¼ö ÀÖ´Ù. ±×·¡¼ pi4´Â ÃÖÃÊ ¼±¾ðµÉ ¶§ ÁÖ¾îÁø ar[0] ÀÌ¿ÜÀÇ ´Ù¸¥ ´ë»óü¸¦ °¡¸®Å³ ¼ö ¾øÀ¸¸ç ar[0]ÀÇ °ªÀ» º¯°æÇÒ ¼öµµ ¾ø´Ù. ¿À·ÎÁö ar[0]ÀÇ °ªÀ» ÀÐÀ» ¼ö¸¸ ÀÖ´Ù.
Æ÷ÀÎÅÍ ¼±¾ð½Ã const Å°¿öµå·Î »ó¼ö Æ÷ÀÎÅ͸¦ ¸¸µå´Â 4°¡Áö °æ¿ì¸¦ »ìÆì ºÃ´Âµ¥ Á¶±Ý È¥¶õ½º·¯¿ï °ÍÀÌ´Ù. const Å°¿öµåÀÇ À§Ä¡¿¡ µû¶ó »ó¼ö°¡ µÇ´Â ´ë»óÀÌ ´Þ¶óÁö´Âµ¥ pi2¿Í pi3ÀÇ °æ¿ì¸¸ Àß ±¸ºÐÇÏ¸é µÈ´Ù. const Å°¿öµå ¹Ù·Î ´ÙÀ½ ´ë»óÀÌ »ó¼ö°¡ µÇ´Âµ¥ ŸÀÔ ¾Õ¿¡ ÀÖÀ¸¸é ´ë»óü°¡ »ó¼ö°¡ µÇ¸ç º¯¼ö¸í ¾Õ¿¡ ÀÖÀ¸¸é º¯¼ö¸¸ »ó¼ö°¡ µÈ´Ù.
int const *´Â const int *¿Í °°Àº Ç¥ÇöÀÌ¸ç ´ë»óü°¡ »ó¼öÀε¥ constÀÇ À§Ä¡°¡ Á÷°üÀûÀÌÁö ¾Ê¾Æ¼ Àß »ç¿ëµÇÁö ¾Ê´Â´Ù. ´ÙÀ½Àº ÇÑ´Ü°è ´õ È®ÀåÇؼ ÀÌÁß Æ÷ÀÎÅÍ¿Í constÀÇ °ü°è¿¡ ´ëÇØ ¿¬±¸ÇØ º¸ÀÚ. ÀÌÁß Æ÷ÀÎÅÍÀÇ °æ¿ì´Â const int * const * const ppi; µûÀ§·Î const¸¦ ¼¼ ±ºµ¥³ª ºÙÀÏ ¼ö ÀÖ°í À§Ä¡¿¡ µû¶ó constÀÇ Àǹ̴ ´Þ¶óÁø´Ù.
¡á Á¦ÀÏ ¾Õ : ppi°¡ °¡¸®Å°´Â Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â Á¤¼ö°¡ »ó¼ö¶ó´Â ¶æ
¡á °¡¿îµ¥ : ppi°¡ °¡¸®Å°´Â Æ÷ÀÎÅÍ°¡ »ó¼ö¶ó´Â ¶æ
¡á Á¦ÀÏ ³¡ : ppi ÀÚü°¡ »ó¼ö Æ÷ÀÎÅͶó´Â ¶æ
´ÙÀ½ ¿¹Á¦´Â constÀÇ À§Ä¡¿¡ µû¶ó ÀÌÁß Æ÷ÀÎÅÍ°¡ ¾î¶² Àǹ̸¦ °¡Áö¸ç ¾î¶² µ¿ÀÛÀÌ ±ÝÁöµÇ´ÂÁö¸¦ Å×½ºÆ®ÇÑ´Ù. ¿¡·¯°¡ ³ª´Â ¹®ÀåÀº ¸ðµÎ ÁÖ¼® ó¸®ÇØ µÎ¾úÀ¸¸ç µÚÂÊ¿¡ ¼³¸íÀ» ´Þ¾Æ µÎ¾úÀ¸¹Ç·Î ÁÖ¼®À» ÀÐ¾î º¸µµ·Ï ÇÏÀÚ.
¿¹ Á¦ : ConstDblPointer |
#include <Turboc.h>
void main()
{
int i=5;
int *pi=&i;
const int *pci;
int * const cpi=&i;
const int * const cpci=&i;
// ÀÏ¹Ý ÀÌÁß Æ÷ÀÎÅÍ - ¸ðµÎ °¡´É
int **ppi1=π
ppi1++;
(*ppi1)++;
**ppi1=0;
// »ó¼ö Áö½Ã Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅÍ
const int **ppi2=&pci;
ppi2++;
(*ppi2)++;
// **ppi2=0; // ¿¡·¯ : ÃÖÁ¾ ´ë»óü(Á¤¼ö) º¯°æ ºÒ°¡
// ºñ»ó¼ö Áö½Ã »ó¼ö Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅÍ
int * const *ppi3=&cpi;
ppi3++;
// (*ppi3)++; // ¿¡·¯ : Áß°£ ´ë»óü(Æ÷ÀÎÅÍ) º¯°æ ºÒ°¡
**ppi3=0;
// ºñ»ó¼ö Áö½Ã ºñ»ó¼ö Æ÷ÀÎÅÍÀÇ »ó¼ö Æ÷ÀÎÅÍ
int ** const ppi4=π
// ppi4++; // ¿¡·¯ : Æ÷ÀÎÅÍ ÀÚü º¯°æ ºÒ°¡
(*ppi4)++;
**ppi4=0;
// »ó¼ö Áö½Ã »ó¼ö Æ÷ÀÎÅ͸¦ Áö½ÃÇÏ´Â »ó¼ö Æ÷ÀÎÅÍ - ÀüºÎ ¿¡·¯
const int * const * const ppi5=&cpci;
// ppi5++;
// (*ppi5)++;
// **ppi5=0;
}
ÀÌ ¿¹Á¦¸¦ º¸°í ¾Æ¸¶ ¿©·¯ºÐµéÀº "¾Æ´Ï ÀÌ »ç¶÷ÀÌ Áö±Ý Àå³Çϳª?" ÀÌ·± »ý°¢À» ÇÒ °ÍÀÌ´Ù. Àå³ ÇÏ´Â °Ô ¸Â´Ù. ½ÇÀü¿¡¼ ÀÌ·± Æ÷ÀÎÅÍ°¡ ²À ÇÊ¿äÇÑ °æ¿ì´Â ±×¸® ÈçÇÏÁö ¾ÊÀ¸¹Ç·Î ÀÌ·± º¹ÀâÇÑ °Í±îÁö »ó¼¼ÇÏ°Ô ¾Ë¾Æ¾ß ÇÒ ÇÊ¿ä´Â ¾øÁö¸¸ ÀÌ Á¤µµ ¿¬½ÀÀÌ µÇ¾î ÀÖ´Ù¸é Æ÷ÀÎÅÍ¿Í constÀÇ °ü°è¸¦ È®½ÇÇÏ°Ô ¾È´Ù°í ÀÚºÎÇصµ ÁÁ´Ù. const ¹Ù·Î ´ÙÀ½ ´ë»óÀÌ »ó¼ö°¡ µÈ´Ù´Â ¿øÄ¢Àº µ¿ÀÏÇÏ´Ù. ÀÌÁß Æ÷ÀÎÅÍ¿¡ ´ëÇØ const Å°¿öµå¸¦ ¾²´Â °æ¿ì´Â »ç½Ç»ó ¹«Ã´ µå¹°Áö¸¸ Æ÷ÀÎÅÍÀÇ ·¹ÆÛ·±½º¿¡ ´ëÇؼ´Â Á¾Á¾ ÀÌ·± Ç¥ÇöÀÌ »ç¿ëµÇ±âµµ ÇÑ´Ù.
±×·¸´Ù¸é ¿Ö »ó¼ö Æ÷ÀÎÅÍ°¡ ÇÊ¿äÇÑ °ÍÀϱî? const int *pi2ÀÇ ´ë»óü°¡ »ó¼ö¶ó´Â °ÍÀ» ¾Ë°í ÀÖ´Ù¸é *pi2ÀÇ °ªÀ» ¹Ù²ÙÁö ¾ÊÀ¸¸é ±×¸¸ÀÌ ¾Æ´Ñ°¡? ÄÄÆÄÀÏ·¯ Â÷¿ø¿¡¼ ÀÌ·± »ó¼ö Æ÷ÀÎÅ͸¦ Áö¿øÇÏ´Â ÀÌÀ¯´Â °íÀÇµç ½Ç¼öµç ¹Ù²îÁö ¸»¾Æ¾ß ÇÒ Áß¿äÇÑ °ªÀ» º¸È£Çϱâ À§ÇؼÀÌ´Ù. ´ÙÀ½ Äڵ忡¼ RATIO´Â ¾î¶² °è»ê½Ä¿¡ »ç¿ëµÇ´Â ¾ÆÁÖ Áß¿äÇÑ »ó¼öÀÌ´Ù.
const double RATIO=82.34;
RATIO=99.99; // ¿¡·¯
const double *pd=&RATIO;
*pd=99.99; // ¿¡·¯
»ó¼ö·Î ¼±¾ðÇßÀ¸¹Ç·Î µÎ ¹ø° ÁÙó·³ RATIO¿¡ ¾î¶² °ªÀ» Á÷Á¢ ´ëÀÔÇÏ´Â °ÍÀº ´ç¿¬È÷ ¿¡·¯·Î ó¸®µÉ °ÍÀÌ´Ù. ´«¿¡ »·È÷ º¸ÀÌ´Â »ó¼ö¿¡ °ªÀ» ´ëÀÔÇÏ´Â ¸ÛûÇÑ ½Ç¼ö¸¦ ÇÏÁö´Â ¾ÊÁö¸¸ Æ÷ÀÎÅ͸¦ ÅëÇØ °£Á¢ÀûÀ¸·Î ÀÌ °ªÀ» ¾×¼¼½ºÇÒ ¶§´Â ¿ì¹ßÀûÀÎ ½Ç¼ö¸¦ ÇÒ °¡´É¼ºÀÌ ÀÖ´Ù. RATIO´Â »ó¼ö¶ó¼ Áº¯°ªÀÌ ¾Æ´ÏÁö¸¸ ¸Þ¸ð¸®¸¦ Á¡À¯ÇÏ°í ÀÖ°í ¹øÁö°¡ ÀÖÀ¸¹Ç·Î &¿¬»êÀÚÀÇ ÇÇ¿¬»êÀÚ·Î »ç¿ëµÉ ¼ö ÀÖ´Ù.
¸¸¾à ÀÌ »ó¼ö¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ pd¸¦ »ç¿ëÇÏ¿© °£Á¢ÀûÀ¸·Î RATIOÀÇ °ªÀ» ¹Ù²Ü ¼ö ÀÖ´Ù¸é ÀÌ°ÍÀº ÀáÀçÀûÀ¸·Î ³í¸®ÀûÀÎ ¿¡·¯°¡ µÉ À§ÇèÀÌ ¾ÆÁÖ Å©´Ù. »ó¼ö¸¦ °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ ÇÔ¼ö³¢¸® ÁÖ°Å´Ï ¹Þ°Å´Ï ÇÏ´Ù º¸¸é ¾ðÁ¦ ÀÌ °ªÀÌ ¹Ù²î¾î ¹ö¸±Áö ¾Ë ¼ö ¾ø¾îÁø´Ù. ¸¸¾à RATIO°¡ Á÷¿øµé¿¡°Ô ÁÙ º¸³Ê½º ºñÀ²À̶ó¸é ÀÌ °ªÀÌ Á¶±Ý¸¸ Ä¿Á®µµ ¾öû³ ÀçÁ¤ ´©ÃâÀÌ ¹ß»ýÇÒ °ÍÀÌ´Ù. ÀÌ·¸°Ô µÇ¸é Á÷¿øµéÀº ÁÁ¾ÆÇÏ°ÚÁö¸¸ ¹ö±×¸¦ ¸¸µç °³¹ßÀÚ´Â »çÇ¥¸¦ ½á¾ß ÇÒ °ÍÀÌ´Ù.
Æ÷ÀÎÅÍ´Â ´ë»óü¸¦ ¿Å°Ü ´Ù´Ï¸ç °ªÀ» Àб⵵ ÇÏ°í ¹Ù²Ü ¼öµµ ÀÖ´Â ±²ÀåÈ÷ Æí¸®ÇÑ µµ±¸ÀÌÁö¸¸ ´Ù¼Ò À§ÇèÇÑ ¸éÀÌ ÀÖ´Ù. ¾î¶² ´ë»óü¿¡ ´ëÇÑ ¹øÁö¸¦ ¾Ë°í ÀÖÀ¸¸é Æ÷ÀÎÅ͸¦ ÅëÇØ ÀÌ ´ë»óü¸¦ ¸¶À½´ë·Î ¹Ù²Ü ¼ö Àֱ⠶§¹®ÀÌ´Ù. ÀϺη¯ ±×·¸°Ô ÇÏÁö´Â ¾Ê°ÚÁö¸¸ ½Ç¼ö·Î Æ÷ÀÎÅ͸¦ À߸ø Á¶ÀÛÇϰųª ¶Ç´Â ¿ÜºÎÀûÀÎ ´Ù¸¥ ¿¡·¯¿¡ ÀÇÇØ Æ÷ÀÎÅÍ°¡ ¾û¶×ÇÑ °÷À» °¡¸®Å³ °¡´É¼ºÀº Ç×»ó ÀÖ´Ù.
ªÀº Äڵ忡¼´Â ÀÌ·± ½Ç¼ö¸¦ ÇÏ´õ¶óµµ ±Ý¹æ ¾îµð¼ ¹®Á¦°¡ ¹ß»ýÇß´ÂÁö ¹ß°ßÇÒ ¼ö ÀÖÁö¸¸ ´ëÇü ÇÁ·ÎÁ§Æ®¿¡¼´Â ½Ç¼ö¸¦ ÇÑ °÷°ú Áõ»óÀÌ ³ªÅ¸³ª´Â °÷ÀÌ ¿ÏÀüÈ÷ µý °÷ÀÏ ¼ö Àֱ⠶§¹®¿¡ ¹ß°ßÇϱ⠴ë´ÜÈ÷ ¾î·Æ´Ù. °Ô´Ù°¡ ´ëÇü ÇÁ·ÎÁ§Æ®´Â º¸Åë ¿©·¯ °³¹ßÀÚ°¡ µ¿½Ã¿¡ ÀÛ¾÷À» Çϴµ¥ Á» ¶î¶îÇÑ °³¹ßÀÚ°¡ ÀÌ·± ½Ç¼ö¸¦ Çϸé ÇÁ·ÎÁ§Æ® Àüü°¡ ½ÃÇÑÆøźÀ» °¡Áö°Ô µÇ´Â ¼ÀÀÌ´Ù. ±×·¡¼ ÄÄÆÄÀÏ·¯ Â÷¿ø¿¡¼ Æ÷ÀÎÅ͸¦ Á» ´õ ¾ÈÀüÇÏ°Ô ¾µ ¼ö ÀÖ´Â ÀåÄ¡¸¦ Á¦°øÇÒ ÇÊ¿ä°¡ Àִµ¥ ±×°ÍÀÌ ¹Ù·Î constÀÌ´Ù.
ÁßÇü±Þ ½Â¿ëÂ÷ÀÇ ¹®Â¦¿¡´Â ¾È¿¡¼ ¹®À» ¿Áö ¸øÇϵµ·Ï ¹Û¿¡¼ Àá±×´Â ÀåÄ¡°¡ Àִµ¥ ÀÌ ÀåÄ¡´Â ÁÖ·Î ¾Æµ¿µéÀ» º¸È£Çϱâ À§ÇØ Á¸ÀçÇÑ´Ù. ¾ÆÀ̵éÀÌ ÁÖÇàÁß¿¡ Â÷¹®À» ¿¾î¼ ¹ÛÀ¸·Î ¶³¾îÁö¸é µ¹ÀÌų ¼ö ¾ø´Â »ç°í°¡ ¹ß»ýÇÒ ¼ö Àֱ⠶§¹®¿¡ Ãâ¹ßÀü¿¡ ¹Û¿¡¼ ¹®À» Àá±Û ¼ö ÀÖ´Ù. ¹°·Ð ¾Æºü°¡ Ãâ¹ßÀü¿¡ "´Þ¸®´Â Áß¿¡ Àý´ë ¹®À» ¿¾î¼´Â ¾ÈµÇ"ÇÏ°í ÁÖÀǸ¦ ÁÙ ¼öµµ ÀÖÁö¸¸ Àå³²Ù·¯±âµé¿¡°Ô´Â ÀÌ·± ¸»ÀÌ ¿ÀÈ÷·Á ´õ À§ÇèÇÒ ¼öµµ ÀÖ´Ù. ÀÌ ÀåÄ¡´Â ¾ÆÀ̵éÀÇ ÀÚÀ¯¸¦ ±¸¼ÓÇϱâ À§ÇÑ °ÍÀÌ ¾Æ´Ï¶ó Ȥ½Ã¶óµµ ÀÖÀ»Áö ¸ð¸£´Â ½Ç¼ö³ª ¹«¸ðÇÑ È£±â½ÉÀ¸·ÎºÎÅÍ ¼ÒÁßÇÑ ¾ÆÀ̵éÀÇ »ý¸íÀ» ÁöÅ°±â À§ÇÑ °ÍÀÌ´Ù. const´Â ÄÄÆÄÀÏ·¯°¡ ¹Ì¼÷·Ã °³¹ßÀÚ¸¦ À§ÇØ Á¦°øÇÏ´Â ÀÏÁ¾ÀÇ ¾ÈÀü ÀåÄ¡¶ó°í ÇÒ ¼ö ÀÖ´Ù.
const´Â Àб⸸ °¡´ÉÇÑ Àбâ Àü¿ë Æ÷ÀÎÅ͸¦ Á¤ÀÇÇÒ ¼ö ÀÖµµ·Ï ÇÔÀ¸·Î½á Æ÷ÀÎÅ͸¦ À߸ø Á¶ÀÛÇÏ´Â ½Ç¼ö¸¦ ÄÄÆÄÀÏ·¯°¡ ¹ß°ßÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ±¸Á¶Ã¼¸¦ ÇÔ¼öÀÇ Àμö·Î ³Ñ±æ ¶§´Â °ªÀ¸·Î ³Ñ±â´Â °Íº¸´Ù Æ÷ÀÎÅÍ·Î ³Ñ±â´Â °ÍÀÌ ÈξÀ ´õ È¿À²ÀûÀε¥ ÀÌ·¸°Ô Çϸé ÂüÁ¶ È£ÃâÀ̹ǷΠÇÔ¼ö ³»ºÎ¿¡¼ ½ÇÀμö¸¦ º¯°æÇÒ ¼ö ÀÖ¾î À§ÇèÇØÁø´Ù. ÀÌ°ÍÀ» ±ÝÁöÇÏ°í ½ÍÀ» ¶§ Àбâ Àü¿ëÀÇ »ó¼ö Áö½Ã Æ÷ÀÎÅÍ·Î Àü´ÞÇÑ´Ù. 4¹ÙÀÌÆ®¸¸ Àü´ÞµÇ¹Ç·Î ¼Óµµ°¡ ºü¸£°í ÇÔ¼ö°¡ ½ÇÀμö¸¦ ÀÐÀ» ¼ö¸¸ ÀÖÀ¸¹Ç·Î ¾ÈÀüÇÏ´Ù. 13ÀåÀÇ OutFriend ÇÔ¼ö´Â const tag_Friend *pf¸¦ ¹Þ´Â °ÍÀÌ °¡Àå ÀÌ»óÀûÀÌ´Ù. ÄÄÆÄÀÏ·¯´Â const Æ÷ÀÎÅÍÀÇ ¾ÈÀü¼ºÀ» ³ôÀ̱â À§ÇØ const Æ÷ÀÎÅÍ¿Í ÀÏ¹Ý Æ÷ÀÎÅͳ¢¸®ÀÇ ´ëÀÔ¿¡ ´ëÇØ ¾ö°ÝÇÑ ±ÔÄ¢À» Àû¿ëÇÑ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.
¿¹ Á¦ : ConstAssign |
#include <Turboc.h>
void main()
{
int ar[5]={1,2,3,4,5};
int *pi1=&ar[0];
const int *pi2;
pi2=pi1; // °¡´É
pi1=pi2; // ºÒ°¡´É
pi1=(int *)pi2; // °¡´ÉÇÏÁö¸¸ ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù.
}
pi1Àº ÀÏ¹Ý Æ÷ÀÎÅÍÀ̸ç ar[0]¸¦ °¡¸®Å°µµ·Ï ÃʱâȵǾú°í pi2´Â »ó¼ö Áö½Ã Æ÷ÀÎÅÍÀÌ´Ù. ÀÌ »óÅ¿¡¼ pi2°¡ pi1ÀÇ ¹øÁö¸¦ ´ëÀÔ¹Þ´Â °ÍÀº °¡´ÉÇÏ´Ù. »ó¼ö Áö½Ã Æ÷ÀÎÅͷδ ´ë»óü¸¦ ÀÐÀ» ¼ö¸¸ Àֱ⠶§¹®¿¡ Àб⠾²±â°¡ ¸ðµÎ °¡´ÉÇÑ pi1 ´ë»óüÀÇ ¹øÁö¸¦ ´ëÀԹ޾Ƶµ ¾Æ¹« ¹®Á¦°¡ ¾ø´Ù.
±×·¯³ª ±× ¹Ý´ë´Â Çã°¡µÇÁö ¾Ê´Âµ¥ ÀÏ¹Ý Æ÷ÀÎÅÍ pi1ÀÌ »ó¼ö Áö½Ã Æ÷ÀÎÅÍ pi2ÀÇ ¹øÁö¸¦ ´ëÀÔ¹ÞÀ» ¼ö´Â ¾ø´Ù. ¸¸¾à ÀÌ°ÍÀÌ Çã°¡µÈ´Ù¸é pi2°¡ °¡¸®Å°´Â »ó¼ö ´ë»óü¸¦ pi1À» ÅëÇØ °£Á¢ÀûÀ¸·Î º¯°æÇÏ´Â °ÍÀÌ °¡´ÉÇØÁö¸ç ÀÌ·¸°Ô µÇ¸é »ó¼ö Áö½Ã Æ÷ÀÎÅ͸¦ Áö¿øÇÏ´Â Àǹ̰¡ ¾ø¾îÁø´Ù. »ó¼ö ´ë»óü¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ¿Í µ¿ÀÏÇÑ Å¸ÀÔÀÇ ÀÏ¹Ý Æ÷ÀÎÅ͸¦ ¼±¾ðÇÑ ÈÄ ÀÌ Æ÷ÀÎÅÍ·Î »ó¼ö ´ë»óüÀÇ °ªÀ» ¹Ù²Ü ¼ö ÀÖ´Ù¸é ´ë»óü¸¦ Á¦´ë·Î º¸È£ÇÒ ¼ö ¾øÀ¸¸ç ±×·¡¼ »ó¼ö Áö½Ã Æ÷ÀÎÅ͸¦ ÀÏ¹Ý Æ÷ÀÎÅÍ¿¡ ´ëÀÔÇÏ´Â °ÍÀº ±ÝÁöµÇ¾î ÀÖ´Ù.
¸¸¾à ÀÏ¹Ý Æ÷ÀÎÅÍ°¡ Á¤ »ó¼ö Æ÷ÀÎÅÍÀÇ ¹øÁö¸¦ ´ëÀÔ¹Þµµ·Ï ÇÏ°í ½Í´Ù¸é ij½ºÆ® ¿¬»êÀÚ¸¦ »ç¿ëÇÒ ¼ö´Â ÀÖ´Ù. »ó¼ö Áö½Ã Æ÷ÀÎÅÍ Å¸ÀÔ(const int *)À» °Á¦·Î ÀÏ¹Ý Æ÷ÀÎÅÍ Å¸ÀÔ(int *)À¸·Î ij½ºÆÃÇÏ¿© ´ëÀÔÇϸé ÀÏ´Ü ´ëÀÔÀº °¡´ÉÇÏ´Ù. ij½ºÆ® ¿¬»êÀÚ±îÁö µ¿¿øÇؼ ŸÀÔÀ» ¹Ù²Ù°íÀÚ ÇÑ´Ù¸é ÄÄÆÄÀÏ·¯°¡ À̸¦ ±»ÀÌ ¸»¸®Áö´Â ¾Ê´Â´Ù. ¹°·Ð ÀÌ·± ÄÚµå´Â ¹Ù¶÷Á÷ÇÏÁö ¾ÊÀ¸¸ç ²À ÇÊ¿äÇÒ ¶§¸¸ È®½ÇÇÏ°Ô ¾ÈÀüÇÏ´Ù´Â °ËÁõÀ» ÇÑ ÈÄ »ç¿ëÇØ¾ß ÇÑ´Ù.
const ÁöÁ¤Àº ÄÄÆÄÀÏ Å¸ÀÓ¿¡ ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ Áö¿øµÈ´Ù. ÄÄÆÄÀÏ·¯´Â º¯¼öÀÇ »ó¼ö¼ºÀ» º¸°í º¯°æÇÒ ¼ö ¾ø´Â °ªÀ» º¯°æÇÏ´Â Äڵ忡 ´ëÇØ »çÁ¤¾øÀÌ ¿¡·¯ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ´Ù. ±×·¡¼ º¸ÅëÀÇ Á¤»óÀûÀÎ ¹æ¹ýÀ¸·Î´Â »ó¼ö¸¦ º¯°æÇÒ ¼ö ¾ø´Ù. ±×·¸´Ù¸é Á¤»óÀûÀÌÁö ¸øÇÑ º¯Ä¢ ÄÚµå·Î´Â »ó¼ö¸¦ º¯°æÇÒ ¼öµµ ÀÖ´Ù´Â ¾ê±âÀε¥ ·±Å¸ÀÓ¿¡ »ó¼öÀÇ Æ÷ÀÎÅÍ·Î °£Á¢ÀûÀ¸·Î °ªÀ» º¯°æÇÏ´Â °ÍÀº °¡´ÉÇÏ´Ù. Á¶±Ý ¿±±â½º·´±â´Â ÇÏÁö¸¸ ÀÌ¿Õ ¿¬±¸ÇÏ´Â ±è¿¡ Æ÷ÀÎÅÍ¿¡ ÀÇÇÑ °Á¦ º¯°æÀ» Å×½ºÆ®ÇØ º¸ÀÚ.
¿¹ Á¦ : ConstTest |
#include <Turboc.h>
void main()
{
const int i=2;
int *pi=(int *)&i;
*pi=3;
printf("i=%d\n",i);
printf("*pi=%d\n",*pi);
const double d=1.0;
double *pd=(double *)&d;
*pd=2.3;
printf("d=%f\n",d);
printf("*pd=%f\n",*pd);
}
int, double Çü º¯¼ö¸¦ ¼±¾ðÇÏ°í ºñ»ó¼ö Æ÷ÀÎÅÍ¿¡ °Á¦·Î ÀÌ »ó¼öÀÇ ¹øÁö¸¦ ´ëÀÔÇÑ ÈÄ Æ÷ÀÎÅÍ·Î °ªÀ» º¯°æÇØ º¸¾Ò´Ù. ÀÌ·± µ¿ÀÛÀº ½ºÆÑ¿¡ Á¤ÀǵǾî ÀÖÁö ¾ÊÀ¸¹Ç·Î °á°ú´Â ÄÄÆÄÀÏ·¯¸¶´Ù ´Ù¸£´Ù. ´ÙÀ½Àº ºñÁÖ¾ó C++ÀÇ ½ÇÇà °á°úÀε¥ ´Ù¼Ò È¥¶õ½º·¯¿ö º¸ÀδÙ.
i=2
*pi=3
d=2.300000
*pd=2.300000
double°ªÀº ¹Ù²îÁö¸¸ int°ªÀº ¹Ù²îÁö ¾ÊÀº °Íó·³ º¸ÀδÙ. ±×·¯³ª ³»ºÎ¸¦ µé¿©´Ù º¸¸é intµµ ½ÇÁ¦·Î´Â °ªÀÌ ¹Ù²îÁö¸¸ »ó¼ö ÂüÁ¶¹®ÀÌ ¿ø·¡ Á¤ÀÇµÈ »ó¼ö°ªÀ» °ð¹Ù·Î »ç¿ëÇϵµ·Ï ÄÄÆÄÀÏÇÏ´Â °ÍÀÌ´Ù. gcc·Î ÀÌ ¿¹Á¦¸¦ Å×½ºÆ®ÇØ º¸¸é µÑ ´Ù ¹Ù²îÁö ¾Ê´Â´Ù. const ÁöÁ¤µÈ »ó¼ö¸¦ Æ÷ÀÎÅÍ·Î °Á¦ º¯°æÇÒ °æ¿ìÀÇ µ¿ÀÛ¿¡ ´ëÇؼ´Â Á¤ÀǵǾî ÀÖÁö ¾ÊÀ¸¹Ç·Î ¾î¶² ÄÄÆÄÀÏ·¯°¡ Ʋ·È´Ù´Â ¾ê±â´Â ÇÒ ¼ö ¾ø´Ù.
ÄÄÆÄÀÏ·¯ °³¹ßÀÚµéÀº ½ºÆÑ ¹®¼´ë·Î ÄÄÆÄÀÏ·¯¸¦ ÀÛ¼ºÇÒ »ÓÀ̹ǷΠÁ¤ÀǵÇÁö ¾ÊÀº Äڵ尡 ¾î¶»°Ô ÄÄÆÄÀϵÉÁö´Â ¾Ë ¼ö ¾ø´Â °ÍÀÌ´Ù. µû¶ó¼ ¿ì¸®´Â ÀÌ·± À̽ļºÀÌ ¾ø´Â Äڵ带 ÀÛ¼ºÇؼ´Â ¾ÈµÈ´Ù. ´ÙÀ½Àº Àμö·Î Àü´ÞµÈ »ó¼ö Áö½Ã Æ÷ÀÎÅÍÀÇ »ó¼ö¼ºÀ» º¯°æÇÏ¿© ½ÇÀμö¸¦ º¯°æÇØ º¸ÀÚ. ÇÔ¼ö´Â ÀÓÀÇÀÇ ½ÇÀμö¿¡ ´ëÇØ µ¿ÀÛÇÒ ¼ö ÀÖ¾î¾ß ÇϹǷΠÄÄÆÄÀÏ·¯°¡ ¿ø·¡ÀÇ »ó¼ö°ªÀ» ƯÁ¤°ªÀ¸·Î °¡Á¤ÇÒ ¼ö ¾ø¾î ¾ÕÀÇ ¿¹Á¦¿Í´Â È¿°ú°¡ Á¶±Ý ´Ù¸£´Ù.
¿¹ Á¦ : ConstTest2 |
#include <Turboc.h>
void func(const int *ai)
{
// *ai=3;
int *pi;
pi=(int *)ai;
*pi=3;
}
void main()
{
int i=2;
func(&i);
printf("%d\n",i);
}
func´Â const int *¸¦ Àü´Þ¹ÞÀ¸¹Ç·Î *ai=3 ½ÄÀ¸·Î ÀÌ Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â ³»¿ëÀ» Á÷Á¢ º¯°æÇÏ´Â °ÍÀº ´ç¿¬È÷ ºÒ¹ýÀÌ´Ù. ±×·¯³ª ºñ»ó¼ö Æ÷ÀÎÅÍ pi·Î °Á¦ º¯°æÇÏ´Â °ÍÀº °¡´ÉÇÏ´Ù. ÄÄÆÄÀÏ·¯´Â pi°¡ °¡¸®Å°´Â ³»¿ëÀÌ ¼±¾ðÇÒ ¶§ºÎÅÍ »ó¼öÀÎÁö ¾Æ´Ï¸é ½ÇÀμö´Â ºñ»ó¼öÀε¥ ÇÔ¼ö·Î Àü´ÞµÉ ¶§¸¸ »ó¼öÀÎÁö´Â ÀüÇô ºÐ°£ÇÒ ¼ö ¾øÀ¸¹Ç·Î *pi=3 È£Ãâ¿¡ ´ëÇØ ¹«Á¶°Ç °ªÀ» º¯°æÇÒ ¼ö¹Û¿¡ ¾ø´Ù. ÀÌ ÄÚµå´Â °ÅÀÇ ´ëºÎºÐÀÇ ÄÄÆÄÀÏ·¯¿¡ ´ëÇؼ µ¿ÀÛÇÑ´Ù.