| wolverine |
int a = 10;
compiler/linker¿¡ ÀÇÇØ¼ º¯¼ö aÀÇ memory address°¡ °áÁ¤µÇ°í, ±×°÷¿¡ 10À̶ó´Â °ªÀÌ ÀúÀåµË´Ï´Ù.
(char*)a
a¶ó´Â º¯¼ö¿¡ ÀÖ´Â 10À̶ó´Â °ªÀÌ char pointer ÇüÅ·ΠÇüº¯È¯(casting)ÀÌ µË´Ï´Ù.
(char*)&a
aÀÇ memory address°¡ char pointer ÇüÅ·ΠÇüº¯È¯(casting)ÀÌ µË´Ï´Ù.
¿¹¸¦ µé¾î¼ ´ÙÀ½°ú °°ÀÌ memory°¡ ÀâÇô ÀÖ´Ù°í °¡Á¤À» ÇßÀ»°æ¿ì,
address value
0x1000 10 <---- º¯¼ö a°¡ ÇÒ´ç(alloate) µÈ °÷
0x1001 11
0x1002 12
0x1003 0
0x000a xx
0x000b xx
0x000c xx
(char*)a ´Â 10À̶ó´Â °ªÀ» ¹ÝÇÑÇÕ´Ï´Ù.
µû¶ó¼ À̰ÍÀ» stringÀ¸·Î ÀÌ¿ëÇÏ°Ô µÇ¸é,
0x000a(10) ¹øÁö¿¡ ÀúÀåµÇ¾î ÀÖ´Â °ªµéÀÌ stringÀ¸·Î ÀÌ¿ëµË´Ï´Ù.
¸¸¾à ÇöÀç memory°¡ À§ÀÇ °æ¿ì¿Í °°À»¶§¿¡ printf("%s", (char*)a) ¶ó°í ÇϰԵǸé,
printf ÇÔ¼ö´Â 0x000a¹øÁö¿¡ ÀÖ´Â °ªÀ» stringÀ¸·Î ÀνÄÇÏ¿©¼
xx¸¦ Ãâ·ÂÇϰԵǸç, À̶§¿¡, xx°ªÀÌ '0'ÀÌ µÉ ¶§±îÁö stringÀ» Ãâ·ÂÇÕ´Ï´Ù.
(char*)&a´Â 0x1000 À̶ó´Â °ªÀ» ¹ÝȯÇÕ´Ï´Ù.
µû¶ó¼ À̰ÍÀ» stringÀ¸·Î ÀÌ¿ëÇÏ°Ô µÇ¸é,
0x1000 ¹øÁö¿¡ ÀúÀåµÇ¾î ÀÖ´Â °ªµéÀÌ stringÀ¸·Î ÀÌ¿ëµË´Ï´Ù.
¸¸¾à ÇöÀç memory°¡ À§ÀÇ °æ¿ì¿Í °°À»¶§¿¡ printf("%s", (char*)&a) ¶ó°í ÇϰԵǸé,
printf ÇÔ¼ö´Â 0x1000¹øÁö¿¡ ÀÖ´Â °ªÀ» stringÀ¸·Î ÀνÄÇÏ¿©¼
ASCII 10,11,12¸¦ Â÷·Ê´ë·Î Ãâ·ÂÇϰԵǸç,
0ÀÌ ³ª¿À°ÔµÇ´Â ½ÃÁ¡¿¡¼ Ãâ·ÂÀ» Á¾·áÇÏ°Ô µË´Ï´Ù. |
2012/07/04 |
|