ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

Ö¸Õë²ÎÊý´«µÝÄÚ´æµÄ·½·¨
2014-11-23 21:58:28 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:18´Î
Tags£ºÖ¸Õë ²ÎÊý ´«µÝ ÄÚ´æ ·½·¨

Vczh Èç¹ûº¯ÊýµÄ²ÎÊýÊÇÒ»¸öÖ¸Õ룬²»ÒªÖ¸ÍûÓøÃÖ¸ÕëÈ¥ÉêÇ붯̬Äڴ档ʾÀý7-4-1ÖУ¬Testº¯ÊýµÄÓï¾äGetMemory(str, 200)²¢Ã»ÓÐʹstr»ñµÃÆÚÍûµÄÄڴ棬strÒÀ¾ÉÊÇNULL£¬ÎªÊ²Ã´£¿

void GetMemory(char *p, int num)

{

p = (char *)malloc(sizeof(char) * num);

}

void Test(void)

{

char *str = NULL;

GetMemory(str, 100); // str ÈÔȻΪ NULL

strcpy(str, "hello"); // ÔËÐдíÎó

}

ʾÀý7-4-1 ÊÔͼÓÃÖ¸Õë²ÎÊýÉêÇ붯̬ÄÚ´æ

벡³öÔÚº¯ÊýGetMemoryÖС£±àÒëÆ÷×ÜÊÇҪΪº¯ÊýµÄÿ ¸ö²ÎÊýÖÆ×÷ÁÙʱ¸±±¾£¬Ö¸Õë²ÎÊýpµÄ¸±±¾ÊÇ _p£¬±àÒëÆ÷ʹ _p = p¡£Èç¹ûº¯ÊýÌåÄڵijÌÐòÐÞ¸ÄÁË_pµÄÄÚÈÝ£¬¾Íµ¼Ö²ÎÊýpµÄÄÚÈÝ×÷ÏàÓ¦µÄÐ޸ġ£Õâ¾ÍÊÇÖ¸Õë¿ÉÒÔÓÃ×÷Êä³ö²ÎÊýµÄÔ­Òò¡£ÔÚ±¾ÀýÖУ¬_pÉêÇëÁËеÄÄڴ棬ֻÊÇ°Ñ _pËùÖ¸µÄÄÚ´æµØÖ·¸Ä±äÁË£¬µ«ÊÇpË¿ºÁδ±ä¡£ËùÒÔº¯ÊýGetMemory²¢²»ÄÜÊä³öÈκζ«Î÷¡£ÊÂʵÉÏ£¬Ã¿Ö´ÐÐÒ»´ÎGetMemory¾Í»áй¶һ¿éÄڴ棬Òò ΪûÓÐÓÃfreeÊÍ·ÅÄÚ´æ¡£

Èç¹û·ÇµÃÒªÓÃÖ¸Õë²ÎÊýÈ¥ÉêÇëÄڴ棬ÄÇôӦ¸Ã¸ÄÓá°Ö¸ÏòÖ¸ÕëµÄÖ¸Õ롱£¬¼ûʾÀý7-4-2¡£

void GetMemory2(char **p, int num)

{

*p = (char *)malloc(sizeof(char) * num);

}

void Test2(void)

{

char *str = NULL;

GetMemory2(&str, 100); // ×¢Òâ²ÎÊýÊÇ &str£¬¶ø²»ÊÇstr

strcpy(str, "hello");

cout<< str << endl;

free(str);

}

ʾÀý7-4-2ÓÃÖ¸ÏòÖ¸ÕëµÄÖ¸ÕëÉêÇ붯̬ÄÚ´æ

ÓÉÓÚ¡°Ö¸ÏòÖ¸ÕëµÄÖ¸ Õ롱Õâ¸ö¸ÅÄî²»ÈÝÒ×Àí½â£¬ÎÒÃÇ¿ÉÒÔÓú¯Êý·µ»ØÖµÀ´´«µÝ¶¯Ì¬ÄÚ´æ¡£ÕâÖÖ·½·¨¸ü¼Ó¼òµ¥£¬¼ûʾÀý7-4-3¡£

char *GetMemory3(int num)

{

char *p = (char *)malloc(sizeof(char) * num);

return p;

}

void Test3(void)

{

char *str = NULL;

str = GetMemory3(100);

strcpy(str, "hello");

cout<< str << endl;

free(str);

}

ʾÀý7-4-3 Óú¯Êý·µ»ØÖµÀ´´«µÝ¶¯Ì¬ÄÚ´æ

Óú¯Êý·µ»ØÖµÀ´´«µÝ¶¯Ì¬ÄÚ´æÕâÖÖ·½·¨ËäÈ»ºÃÓ㬵«Êdz£³£ÓÐÈ˰ÑreturnÓï¾äÓôíÁË¡£ÕâÀïÇ¿µ÷²»ÒªÓÃreturnÓï¾ä·µ»ØÖ¸Ïò¡°Õ»Äڴ桱µÄÖ¸ Õ룬ÒòΪ¸ÃÄÚ´æÔÚº¯Êý½áÊøÊ±×Ô¶¯ÏûÍö£¬¼ûʾÀý7-4-4¡£

char *GetString(void)

{

char p[] = "hello world";

return p; // ±àÒëÆ÷½«Ìá³ö¾¯¸æ

}

void Test4(void)

{

char *str = NULL;

str = GetString(); // str µÄÄÚÈÝÊÇÀ¬»ø

cout<< str << endl;

}

ʾÀý7-4-4 returnÓï¾ä·µ»ØÖ¸Ïò¡°Õ»Äڴ桱µÄÖ¸Õë

Óõ÷ÊÔÆ÷Ö𲽸ú×ÙTest4£¬·¢ÏÖÖ´ÐÐstr = GetStringÓï¾äºóstr²»ÔÙÊÇNULLÖ¸Õ룬µ«ÊÇstrµÄÄÚÈݲ»ÊÇ¡°hello world¡±¶øÊÇÀ¬»ø¡£

Èç¹û°ÑʾÀý7-4-4¸Äд³ÉʾÀý7-4-5£¬»áÔõôÑù£¿

char *GetString2(void)

{

char *p = "hello world";

return p;

}

void Test5(void)

{

char *str = NULL;

str = GetString2();

cout<< str << endl;

}

ʾÀý7-4-5 returnÓï¾ä·µ»Ø³£Á¿×Ö·û´®

º¯ÊýTest5ÔËÐÐËäÈ»²»»á³ö´í£¬µ«ÊǺ¯Êý GetString2µÄÉè¼Æ¸ÅÄîÈ´ÊÇ´íÎóµÄ¡£ÒòΪGetString2Äڵġ°hello world¡±Êdz£Á¿×Ö·û´®£¬Î»ÓÚ¾²Ì¬´æ´¢Çø£¬ËüÔÚ³ÌÐòÉúÃüÆÚÄں㶨²»±ä¡£ÎÞÂÛʲôʱºòµ÷ÓÃGetString2£¬Ëü·µ»ØµÄʼÖÕÊÇͬһ¸ö¡°Ö»¶Á¡±µÄÄÚ´æ¿é¡£

Ô­ÎĵĽâÊÍÊÇ£º
º¯ÊýÌåÄڵijÌÐòÐÞ¸ÄÁË_pµÄÄÚÈÝ ºÍ _pËùÖ¸µÄÄÚ´æµØÖ·¸Ä±äÁË ÊÇÁ½»ØÊÂ.ǰһ¾äÊÇÖ¸ÐÞ¸ÄÁË_pËùÖ¸µÄµØÖ·ÄÚµÄÄÚÈÝ,¶øºóÒ»¾äÊǸıäÁ˵ØÖ·.

ÔÚtestÖÐ


strÊÇÖ¸Õë±äÁ¿,¼ÙÉèËüµÄµØÖ·ÊÇ1111h,ÀïÃæµÄÖµ¾ÍÊÇNULL(0000h)
getmemory(str,100)Öд«ÈëµÄÊÇstrµÄÖµÒ²¾ÍÊÇ0000h

ÔÚGetMemoryÖÐ,pÊÇÒ»¸öÖ¸Ïò×Ö·ûµÄÖ¸Õë(ÔÚº¯ÊýµÄÁÙʱջÖÐ),¼ÙÉèËüµÄµØÖ·ÊÇ1000h,
ÔÙº¯Êýµ÷ÓÃÖгöÈëµÄÖµÊÇ0000h,ÄÇôpÕâ¸ö±äÁ¿ÖеÄÖµ¾ÍÊÇ0000h
ÔÚÖ´ÐÐp = (char *)malloc(sizeof(char) * num)ºó,pµÄÖµ±äΪ·ÖÅäµÄ¶ÑÄÚ´æ,Èç1234H

º¯Êý·µ»ØÊ±,pÒòΪÊÇÔÚº¯ÊýÕ»ÖÐ,Ëæ×ź¯ÊýµÄ½áÊø,¶øÊ§Ð§

strÖеÄÖµ»¹ÊÇ0000h ¡¾Õý½â£¡¡¿

¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£ºÎÒҲҪѧCÓïÑÔ-µÚÊ®¶þÕÂ:±àÒëÔ¤´¦.. ÏÂһƪ£ºcin¶Áȡʧ°Üºó½øÈëËÀÑ­»·£¿¨DÆÊÎ..

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ: