·¢²©ÎÄ
linuxÍøÂ翪·¢×¨×¢Õß(¼á³ÖÔ­´´)

linuxfocus.blog.chinaunix.net

¶àÔĶÁ£¬¶à˼¿¼£¬¶àʵ¼ù£¬¶à·ÖÏí£¡   
¸öÈË×ÊÁÏ
  • ²©¿Í·ÃÎÊ£º1171231
  • ²©ÎÄÊýÁ¿£º197
  • ²©¿Í»ý·Ö£º8553
  • ²©¿ÍµÈ¼¶£º×¼½«
  • ¹Ø×¢ÈËÆø£º 141
  • ×¢²áʱ¼ä£º2010-07-14 12:45:13
¶©ÔÄÎҵIJ©¿Í
  • ¶©ÔÄ
  • ¶©Ôĵ½Ïʹû
  • ¶©Ôĵ½×¥Ïº
  • ¶©Ôĵ½Google
×ÖÌå´óС£º´ó ÖРС²©ÎÄ


±¾ÎĵÄcopyleft¹égfree.wind@gmail.comËùÓУ¬Ê¹ÓÃGPL·¢²¼£¬¿ÉÒÔ×ÔÓÉ¿½±´£¬×ªÔØ¡£µ«×ªÔØÇë±£³ÖÎĵµµÄÍêÕûÐÔ£¬×¢Ã÷Ô­×÷Õß¼°Ô­Á´½Ó£¬ÑϽûÓÃÓÚÈκÎÉÌÒµÓÃ;¡£
×÷Õߣºgfree.wind@gmail.com
²©¿Í£ºlinuxfocus.blog.chinaunix.net
    


½ñÌ죬Ö÷ÒªÑо¿Ò»ÏÂÊý×éºÍÖ¸ÕëµÄ±¾ÖÊ£¬¼´ËüÃǵ½µ×ÊÇʲô£¿£¨ÏÂÎͼÊÇÎÒ×Ô¼ºµÄÀí½â£¬Ò²Ðí²»¹»×¼È·£¬»¶Ó­´ó¼ÒÅÄש£©
Çë¿´ÏÂÃæµÄ´úÂ룺
  1. #include <stdlib.h>
  2. #include <stdio.h>

  3. int main()
  4. {
  5.     int array[4] = {0};
  6.     int *pointer = NULL;
  7.     int value = 0;

  8.     value = array;
  9.     value = &array;
  10.     value = array[0];
  11.     value = &array[0];
  12.     value = point;
  13.     value = &point;

  14.     return 0;
  15. }
ÏÂÃæÊǸÃC³ÌÐòµÄ»ã±à´úÂ룺
  1.   1 0x08048394 <+0>: push %ebp
  2.   2 0x08048395 <+1>: mov %esp,%ebp
  3.   3 0x08048397 <+3>: sub $0x20,%esp
  4.   /*
  5.   µÚ4ÐÐÖÁµÚ7ÐжÔÓ¦C´úÂëint array[4] = {0};
  6.   ÕâÀï˵Ã÷Êý×éÖ»ÊÇÒ»¸öͬÀàÐͱäÁ¿µÄÄÚ´æ¿Õ¼äµÄ¼¯ºÏ¡£
  7.   ¶ÔÓ¦Õâ¸öÀý×Ó£¬ÔÚÕ»ÉÏÉêÇëÁË4¸öÕûÐαäÁ¿µÄ¿Õ¼ä¡£
  8.   */
  9.   4 0x0804839a <+6>: movl $0x0,-0x14(%ebp)
  10.   5 0x080483a1 <+13>: movl $0x0,-0x10(%ebp)
  11.   6 0x080483a8 <+20>: movl $0x0,-0xc(%ebp)
  12.   7 0x080483af <+27>: movl $0x0,-0x8(%ebp)
  13.   /*
  14.   µÚ8ÐжÔÓ¦int *point = NULL; 
  15.   ÕâÀï˵Ã÷Ö¸Õë±¾Éí×Ô¼ºÒ²ÊÇÒ»¸ö±äÁ¿£¬Í¬ÑùÕ¼ÓÃÁËÕ»µÄ¿Õ¼ä¡£
  16.   ÔÚÕâ´¦Òª¶Ô±ÈÊý×éµÄ´¦Àí£¬Êý×éµÄÕ¼ÓõĿռäʵ¼ÊÉÏÊÇÊý×éÖеÄÔªËØËùÕ¼Óõġ£
  17.   ÔÚ±¾ÀýÖУ¬¼´array[0],array[1],array[2],array[3]£¬¶øarray±¾Éíʵ¼ÊÉϸüÏñÒ»¸ölabel¡£
  18.   */
  19.   8 0x080483b6 <+34>: movl $0x0,-0x18(%ebp)
  20.   // µÚ9ÐжÔÓ¦int value = 0;
  21.   9 0x080483bd <+41>: movl $0x0,-0x4(%ebp)
  22.  /*
  23.  10~11ÐУ¬¶ÔÓ¦´úÂëvalue = array
  24.  ÒòΪarrayÖ»ÊÇÒ»¸öÊý×éµÄÃû³Æ£¬ËùÒÔvalue = array¾ÍÊǽ«arrayÊý×éµÄÊ×ÔªËØµÄµØÖ·¸³¸øvalue¡£
  25.  Õâ¸öÓ¦¸Ã¾ÍÊÇC±ê×¼µÄÒ»¸ö¹æÔò¡£ÕâÒ²ÊÇ×îºÏÀíµÄÐÐΪ£¬ÒòΪÈç¹û²»ÊÇÈ¡arrayÊý×éµÄÊ×µØÖ·£¬ÆäËüµÄÐÐΪ¸ü¼ÓûÓÐÒâ  Òå¡£
  26.  */
  27.  10 0x080483c4 <+48>: lea -0x14(%ebp),%eax
  28.  11 0x080483c7 <+51>: mov %eax,-0x4(%ebp)
  29.  /*
  30.  12~13ÐУ¬¶ÔÓ¦´úÂëvalue = &array
  31.  ´ÓCÓïÑÔµÄÓïÒåÉÏ¿´£¬¾ÍÊÇÈ¡arrayµÄµØÖ·¡£
  32.  ´Ó»ã±àÉÏ¿´£¬Ò²ÊÇÈ¡arrayÊý×éµÄÊ×ÔªËØµÄµØÖ·¡£
  33.  */
  34.  12 0x080483ca <+54>: lea -0x14(%ebp),%eax
  35.  13 0x080483cd <+57>: mov %eax,-0x4(%ebp)
  36.  /*
  37.  14~15ÐÐ, ¶ÔÓ¦´úÂëvalue = array[0]
  38.  ÕâÀïÓëÉÏÎIJ»Í¬£¬È¡Êý×éµÄÄÚÈݸ³¸øvalue
  39.  */
  40.  14 0x080483d0 <+60>: mov -0x14(%ebp),%eax
  41.  15 0x080483d3 <+63>: mov %eax,-0x4(%ebp)
  42.  /* 
  43.  16~17ÐУ¬¶ÔÓ¦´úÂëvalue = &array[0]
  44.  ºÜÃ÷ÏÔ£¬È¡array[0]µÄµØÖ·¸³¸øvalue
  45.  */
  46.  16 0x080483d6 <+66>: lea -0x14(%ebp),%eax
  47.  17 0x080483d9 <+69>: mov %eax,-0x4(%ebp)
  48.  /*
  49.  18~19ÐУ¬¶ÔÓ¦´úÂëvalue = pointer;
  50.  °´ÕÕÉÏÎĵÄ˵Ã÷£¬Ö¸Õë±¾Éí¾ÍÊÇÒ»¸ö±äÁ¿£¬ËùÒÔÕâÀï¾ÍÊǽ«Õâ¸ö±äÁ¿µÄÖµ¸³¸øvalue£¬¼´pointerµÄÖµ¸³¸øvalue£¬
  51.  Ò²¾ÍÊÇ0.
  ×¢ÒâÕâÀïÓëvalue=arrayµÄÇø±ð¡£ÒòΪָÕë±¾Éí¾ÍÊÇÒ»¸ö±äÁ¿£¬ËùÒÔvalue = pointerµÄºÏÀíÓïÒå¾ÍÊǽ«pointerµÄ   Öµ¸³¸øvalue£¬¶øarray±¾Éí²¢²»ÊÇÒ»¸ö±äÁ¿£¬ËùÒÔvalue=arrayµÄÓïÒ壬ҲÊǽ«arrayµÄÊý×éÊ×ÔªËØµÄµØÖ·¸³¸øvalue¡£
  1.  */
  2.  18 0x080483dc <+72>: mov -0x18(%ebp),%eax
  3.  19 0x080483df <+75>: mov %eax,-0x4(%ebp)
  4.  /*
  5.  20~21ÐУ¬¶ÔÓ¦´úÂëvalue = &pointer£»
  6.  È¡pointerµÄµØÖ·¸³¸øvalue
  7.  */
  8.  20 0x080483e2 <+78>: lea -0x18(%ebp),%eax
  9.  21 0x080483e5 <+81>: mov %eax,-0x4(%ebp)
  10.  /*
  11.  22~24ÐУ¬¶ÔÓ¦´úÂëvalue = *pointer;
  12.  È¡poniter±£´æµÄÖµ£¬½«Õâ¸öÖµ×÷Ϊһ¸öµØÖ·£¬È»ºóÈ¡¸ÃµØÖ·µÄÖµ¸³¸øvalue¡£
  13.  ÔÚÕâÀpointerµÄÖµÊÇ0£¬ËùÒÔÕâ¾ä»°µÄÓïÒåÊÇ´ÓpointerÈ¡³öËüµÄÖµ0£¬È»ºó´ÓµØÖ·0ȡֵ¸³¸øvalue¡£
  14.  µ±È»£¬Èç¹ûÖ´Ðе½ÕâÀ³ÌÐò»ácrash¡£ÒòΪµØÖ·0Ϊ·Ç·¨µØÖ·¡£
  15.  */
  16.  22 0x080483e8 <+84>: mov -0x18(%ebp),%eax
  17.  23 0x080483eb <+87>: mov (%eax),%eax
  18.  24 0x080483ed <+89>: %eax,-0x4(%ebp)
  19.  22 0x080483f0 <+92>: mov $0x0,%eax
  20.  23 0x080483f5 <+97>: leave
  21.  24 0x080483f6 <+98>: ret
´ÓÉÏÃæµÄ·ÖÎöÖУ¬¿ÉÒÔ¿´³ö£¬¾¡¹Ü´ó¶àÊýÇé¿öÏ£¬Êý×éºÍÖ¸Õë¿ÉÒÔͨÓᣵ«ÊÇÓÉÓÚ¶ÔÓÚ&·ûºÅµÄ²»Í¬µÄÓïÒå½âÊÍ£¬ÔÚÓÐ&µÄÇé¿öϵĴúÂ룬Êý×éºÍÖ¸ÕëÊÇÎÞ·¨Í¨Óõġ£

Çë¿´ÏÂÃæµÄ´úÂë
  1. #include <stdlib.h>
  2. #include <stdio.h>


  3. static void show_str_pointer(const char **ppstr)
  4. {
  5.     printf("%s\n", *ppstr);
  6. }

  7. int main()
  8. {
  9.     char array[4] = "abc";
  10.     char *pointer = "abc";

  11.     show_str_pointer(&pointer);
  12.     show_str_pointer(&array);

  13.     return 0;
  14. }
Ö´Ðнá¹ûΪ£º
abc
7�
ÆäÖÐshow_str_pointer(&pointer)µÄÊä³ö½á¹ûΪÎÒÃÇËùÆÚÍûµÄ£¬¶øshow_str_pointer(&array)µÄÊä³öΪÂÒÂë¡£

Æä¸ù±¾Ô­Òò¾ÍÊÇÒòΪÉÏÃæËù½ÒʾµÄÊý×éºÍÖ¸ÕëµÄ±¾Öʲ»Í¬, &arrayÓëarrayµÄÓïÒåÏàͬ¡£ÔÚÕâÀïÖ¸ÕëÓëÊý×éÊDz»ÄÜ»¥»»µÄ¡£&pointerΪָÕëµÄµØÖ·£¬Óëshow_str_pointer²ÎÊýchar**ppstr£¬Ö¸ÏòÖ¸ÕëµÄÖ¸ÕëµÄ±äÁ¿ÀàÐÍÏàͬ¡£¶ø&arrayÈÔȻΪÊý×鵨ַ£¬Óë²ÎÊýchar **ppstrµÄÀàÐͲ»·û¡£

×îºóÏ£Íû£¬´ó¼Ò´ÓÉÏÃæµÄ·ÖÎöºÍÀý×ÓÖУ¬¿ÉÒÔÀí½âÊý×éºÍÖ¸ÕëµÄ±¾ÖÊ£¬ÒÔ¼°ºÎʱËüÃÇÖ®¼ä¿ÉÒÔ»¥»»£¬ºÎʱ²»ÄÜ»¥»»¡£


²©¿ÍÍÆ¼öÎÄÕÂ
  • C (2011-06-06 21:07:41)
  • GCC (2011-07-25 21:58:58)
  • SCCB (2011-09-30 09:31:57)
[·¢ÆÀÂÛ] ÆÀÂÛ ÖØÒªÌáʾ£º¾¯ÌèÐé¼ÙÖн±ÐÅÏ¢!
  • GFree_Wind 2012-03-20 21:44
    TestForCU: Óûã±àÈ¥½âÊÍÓï·¨ÊǸö²»´íµÄ·½·¨£¬Ñ§Ï°Ñ§Ï°£¡
    ÕâЩ¶«¶«ÈÃÎÒÏëÆðCÖн²µÄ×óÖµ£¬ÓÒÖµ£¡£¡
    ¾õµÃ&£¨&a£©²»ÐеĵÀÀíºÍ 1 = a;Ò»Ñù¡£¡£¡£
    ºÇºÇ¡£¡£¡£¹Ø×¢Ò»ÏÂÄã.....
    ´Ó»ã±à¿ÉÒÔ¿´³öCµÄ¾ßÌåʵÏÖ£¬±ãÓÚÀí½âCµÄ¸ÅÄî¡£ÒòΪCµÄ¸ÅÄîÏà¶ÔÓÚ»ã±àÀ´Ëµ£¬ÊÇÒ»ÖÖ³éÏ󣬶ø»ã±àÔò¾ßÌå¡£
    ¶ø»ã±àÊÇ»úÆ÷ÓïÑԵijéÏ󣬲»¹ýÎÒ»¹Ã»ÓÐÐËȤ¿´»úÆ÷ÓïÑÔºÇ

    Ö§³ÖÍÚ·Ø£¬Ö§³ÖÌÖÂÛ¡£
    Äã˵µÄ&(&a)²»ÐеĵÀÀíȷʵºÍ1=aÒ»Ñù¡£
  • TestForCU 2012-03-20 20:30
    Óûã±àÈ¥½âÊÍÓï·¨ÊǸö²»´íµÄ·½·¨£¬Ñ§Ï°Ñ§Ï°£¡
    ÕâЩ¶«¶«ÈÃÎÒÏëÆðCÖн²µÄ×óÖµ£¬ÓÒÖµ£¡£¡
    ¾õµÃ&£¨&a£©²»ÐеĵÀÀíºÍ 1 = a;Ò»Ñù¡£¡£¡£
    ºÇºÇ¡£¡£¡£¹Ø×¢Ò»ÏÂÄãµÄblog..ÍÚ·ØÃ»Òâ¼û°É
  • GFree_Wind 2011-09-21 22:55
    escarp: ×ªÔØÁ˹þ.....
    »¶Ó­×ªÔØ¡£¡£¡£
  • escarp 2011-09-21 22:14
    ×ªÔØÁ˹þ
  • GFree_Wind 2011-08-29 23:15
    Rainyzzj: ·Ç³£¸Ðл£¬½ñÌìÃæÊԾͿ¼µ½Õâ¸öÁË£¬»¹ºÃ֮ǰ¿´¹ýÄãµÄ²©ÎÄ¡£Ð»Ð»À²¡£.....
    »ú»áÓÀÔ¶Áô¸øÓÐ×¼±¸µÄÈ˺Ç
  • Rainyzzj 2011-08-29 18:14
    ·Ç³£¸Ðл£¬½ñÌìÃæÊԾͿ¼µ½Õâ¸öÁË£¬»¹ºÃ֮ǰ¿´¹ýÄãµÄ²©ÎÄ¡£Ð»Ð»À²¡£
  • GFree_Wind 2011-07-21 18:53
    SkyMei777: char array[4] = "abc";
        char *pointer = "abc";

        show_str_pointer(&pointer);
        show_str_pointer(&array);
    Õâ¶Î´úÂë.....
    °´ÕÕÎÒÁíÒ»¸ö»Ø¸´ÖÐËù˵£¬Êý×éarray[4]£¬Õâ¸öarrayÓëÄãËù¾ÙµÄÀý×Ó&a²¢²»ÍêÈ«Ïàͬ£¬²¢²»ÊÇÒ»¸ö´¿µØÖ·
  • GFree_Wind 2011-07-21 18:51
    SkyMei777: Èç¹ûÕâÑù¿ÉÒÔ£¬¾Í¿ÉÒÔ¶¨Òå
    int a=10;
    ÓÃ&(&(&...(&a))),´«µØÖ·¡¢È»ºó*(*(*...(*a)))À´È¡ÖµÁË¡£
    ÏÔÈ»ÕâÑùÐв»Í¨.....
    ÊÇÕâ¸öµÀÀí¡£

    µ«ÊÇÓÐÒ»¸öÎÊÌâÊÇ
    ±ÈÈçint a = 10;
    µ±Ê¹ÓÃ&(&a)»á±àÒë³ö´í£¬ÒòΪ&aÊÇÒ»¸öµØÖ·£¬ÔÙ´Î&&aʱ»á³ö´í¡£
    ¶øint a[] = {0};
    Èç¹û±àÒëÆ÷½ö½ö°Ñaµ±×÷ÊÇÒ»¸öµØÖ·µÄ»°£¬ÔÙ´Î&aͬÑùÒ²Ó¦¸Ã±¨´í¡£
    ËùÒÔ¶ÔÓÚÊý×éaÀ´Ëµ£¬²¢²»ÊÇÒ»¸ö¼òµ¥µÄµØÖ·¡£Êµ¼ÊÉ϶ÔÓÚÊý×éÀ´Ëµarray=&array
  • SkyMei777 2011-07-21 17:04
    Èç¹ûÕâÑù¿ÉÒÔ£¬¾Í¿ÉÒÔ¶¨Òå
    int a=10;
    ÓÃ&(&(&...(&a))),´«µØÖ·¡¢È»ºó*(*(*...(*a)))À´È¡ÖµÁË¡£
    ÏÔÈ»ÕâÑùÐв»Í¨
  • SkyMei777 2011-07-21 17:01
    char array[4] = "abc";
        char *pointer = "abc";

        show_str_pointer(&pointer);
        show_str_pointer(&array);
    Õâ¶Î´úÂëÊDz»ÊÇÓÐÎÊÌ⣿
    array±¾Éí¾ÍÊǸöµØÖ·£¬&arrayÕâÖÖ×ö·¨±¾ÉíºÃÏñÊÇȡһ¸öµØÖ·µÄµØÖ·£¬³ö´íÊDZØÈ»µÄ¡£¾ÍÏñÊǶ¨ÒåÁËÒ»¸ö±äÁ¿£¬ÔÙÈ¡±äÁ¿µÄµØÖ·µÄµØÖ·.
    int a=10;
    &£¨&a£©,ÕâÖÖ×ö·¨£¬&(&a)¾ÍÓÐÎÊÌâÁË
    ²»ÖªµÀÒÔÉÏ˵·¨½öΪ̽ÌÖ£¬²»ÖªµÀÊÇ·ñÕýÈ·£¬Èç²»ÕýÈ·£¬ÇëÖ¸Õý¡£
Ç×£¬Äú»¹Ã»ÓеǼ,Çë[µÇ¼]»ò[×¢²á]ºóÔÙ½øÐÐÆÀÂÛ