C³ÌÐòÖоßÓзḻµÄÊý¾ÝÀàÐÍ£¬°üÀ¨ÉùÃ÷ÖÐÏÔʽ¶¨ÒåµÄÀàÐͺÍÓÃ×ö±í´ïʽÖмäÀàÐ͵ĵ¼³öÀàÐÍ¡£ÀýÈ磬ÏÂÃæµÄ¸³ÖµÓï¾ä°üº¬3 ÖÖ²»Í¬ÀàÐÍ:
int *p, x;
*p = x;
xÊÇÒ»¸ö´æ·ÅÕûÊýµÄµ¥ÔªµÄµØÖ·£¬Òò´ËxµÄµØÖ·µÄÀàÐÍÊÇ£ºÖ¸ÏòÒ»¸öÕûÊýµÄÖ¸Õë¡£xµÄÖµµÄÀàÐÍÊÇÕûÐÍ¡£Í¬Ñù, pµÄ×óÖµµÄÀàÐÍÊÇÖ¸ÏòÒ»¸öÕûÊýµÄÖ¸ÕëµÄÖ¸Õ룬pµÄÓÒÖµµÄÀàÐÍÊÇÖ¸ÏòÒ»¸öÕûÊýµÄÖ¸Õ룬*pµÄÀàÐÍÊÇÕûÊý¡£lccÔÚ±àÒ븳ֵÓï¾äʱ±ØÐë´¦ÀíËùÓÐÕâЩÀàÐÍ¡£
lccʵÏÖÁËÀàÐͱíʾºÍÒ»×é¸Ã±íʾ֮Éϵĺ¯Êý£¬±¾Õ½«¶Ô´Ë½øÐнéÉÜ¡£º¯Êý°üÀ¨´´½¨ÀàÐ͵ÄÀàÐ͹¹Ô캯ÊýÒÔ¼°²âÊÔÀàÐÍ µÄÀàÐͶÏÑÔº¯Êý¡£lcc»¹±ØÐëʵÏÖÀàÐͼì²é£¬È·±£ÉùÃ÷ºÍ±í´ïʽ×ñÊØÓïÑÔÖÆ¶¨µÄ¹æÔò¡£ÀàÐͼì²éʹÓñ¾Õ½éÉܵĶÏÑÔº¯Êý£¬Ïêϸ²Î¼ûµÚ9Õº͵Ú11Õ¡£
4.1 ÀàÐͱíʾ
CÓïÑÔµÄÀàÐÍͨ³£ÓÃÓ¢ÎĵÄǰ׺ÐÎʽÃè»æ£¬Ëùνǰ׺ÐÎʽ£¬¾ÍÊÇÖ¸ÀàÐͲÙ×÷ÊýÔÚÀàÐͲÙ×÷·ûÖ®ºó³öÏÖ¡£ÀýÈ磬int *pÉùÃ÷pÊÇÒ»¸öÖ¸ÏòintµÄÖ¸Õë,¾ÍÊÇCÀàÐÍint*µÄǰ׺±íʾ£¬Ö¸ÕëÊDzÙ×÷·û£¬intÊDzÙ×÷Êý£¬Í¬Ñù£¬char*(*strings)[10]½«strings˵Ã÷Ϊ:
Ò»¸öÖ¸Õ룬ָÏò
Ò»¸ö´óСΪ10µÄÊý×飬ÿ¸öÊý×éÔªËØÊÇÒ»¸ö
&nb ......
C·ç¸ñ×Ö·û´®£º¶Ô×Ö·û´®½øÐвÙ×÷µÄ C º¯Êý¶¨ÒåÔÚÍ·Îļþ<cstring>ÖУ»
1. ×Ö·û´®¶¨Ò壺char* result£»
2. ×Ö·û´®µÄ×îºóÒ»¸ö×Ö·ûÊÇnull×Ö·û£¨'\0'£©£¬¿ÉÒÔͨ¹ýÕâ¸ö×Ö·ûÈ·¶¨×Ö·û´®µÄ½áβ¡£
3. strlen()·µ»ØµÄÊÇ×Ö·û´®µÄ´óС£»Òò´Ë£¬·ÖÅä¿Õ¼äµÄʱºò£¬ÐèÒª±È×Ö·û´®µÄʵ¼Ê¿Õ¼ä´ó1.
e.g. char* copyString(const char* inString)
{
char *result = new char[strlen(inString)];//BUG£¡ off by one
strcpy(result, inString);
return result;
}
explain£º strlen£¨£©·µ»ØµÄÊÇ×Ö·û´®µÄ´óС£¬±ÈÈç"ab"£¬·µ»ØµÄÊÇ2¡£¶øÔÚnew½øÐзÖÅäµÄʱºò£¬ÐèҪΪ'\0'·ÖÅ ......
C·ç¸ñ×Ö·û´®£º¶Ô×Ö·û´®½øÐвÙ×÷µÄ C º¯Êý¶¨ÒåÔÚÍ·Îļþ<cstring>ÖУ»
1. ×Ö·û´®¶¨Ò壺char* result£»
2. ×Ö·û´®µÄ×îºóÒ»¸ö×Ö·ûÊÇnull×Ö·û£¨'\0'£©£¬¿ÉÒÔͨ¹ýÕâ¸ö×Ö·ûÈ·¶¨×Ö·û´®µÄ½áβ¡£
3. strlen()·µ»ØµÄÊÇ×Ö·û´®µÄ´óС£»Òò´Ë£¬·ÖÅä¿Õ¼äµÄʱºò£¬ÐèÒª±È×Ö·û´®µÄʵ¼Ê¿Õ¼ä´ó1.
e.g. char* copyString(const char* inString)
{
char *result = new char[strlen(inString)];//BUG£¡ off by one
strcpy(result, inString);
return result;
}
explain£º strlen£¨£©·µ»ØµÄÊÇ×Ö·û´®µÄ´óС£¬±ÈÈç"ab"£¬·µ»ØµÄÊÇ2¡£¶øÔÚnew½øÐзÖÅäµÄʱºò£¬ÐèҪΪ'\0'·ÖÅ ......
ʹÓÃC/C++À©Õ¹Python
·Òë:
gashero
Èç¹ûÄã»áÓÃC£¬ÊµÏÖPythonǶÈëÄ£¿éºÜ¼òµ¥¡£ÀûÓÃÀ©Õ¹Ä£¿é¿É×öºÜ¶àPython²»·½±ã×öµÄÊÂÇ飬ËûÃÇ¿ÉÒÔÖ±½Óµ÷ÓÃC¿âºÍϵͳµ÷Óá£
ΪÁËÖ§³ÖÀ©Õ¹£¬Python API¶¨ÒåÁËһϵÁк¯Êý¡¢ºêºÍ±äÁ¿£¬ÌṩÁ˶ÔPythonÔËÐÐʱϵͳµÄ·ÃÎÊÖ§³Ö¡£PythonµÄC APIÓÉCÔ´Âë×é³É£¬²¢°üº¬ “Python.h” Í·Îļþ¡£
±àдÀ©Õ¹Ä£¿éÓëÄãµÄϵͳÏà¹Ø£¬ÏÂÃæ»áÏê½â¡£
Ŀ¼
1 Ò»¸ö¼òµ¥µÄÀý×Ó
2 ¹ØÓÚ´íÎóºÍÒì³£
3 »Øµ½Àý×Ó
4 Ä£¿é·½·¨±íºÍ³õʼ»¯º¯Êý
5 ±àÒëºÍÁ¬½Ó
6 ÔÚCÖе÷ÓÃPythonº¯Êý
7 ½âÎö´«¸øÀ©Õ¹Ä£¿éº¯ÊýµÄ²ÎÊý
8 ½âÎö´«¸øÀ©Õ¹Ä£¿éº¯ÊýµÄ¹Ø¼ü×Ö²ÎÊý
9 ¹¹ÔìÈÎÒâÖµ
10 ÒýÓüÆÊý
10.1 PythonÖеÄÒýÓüÆÊý
10.2 ÓµÓйæÔò
10.3 ΣÏյı¡±ù
10.4 NULLÖ¸Õë
11 ʹÓÃC++±àдÀ©Õ¹
12 Ìṩ¸øÆäËûÄ£¿éÒÔC API
1 Ò»¸ö¼òµ¥µÄÀý×Ó
ÏÂÃæµÄÀý×Ó´´½¨Ò»¸ ......
ʹÓÃC/C++À©Õ¹Python
·Òë:
gashero
Èç¹ûÄã»áÓÃC£¬ÊµÏÖPythonǶÈëÄ£¿éºÜ¼òµ¥¡£ÀûÓÃÀ©Õ¹Ä£¿é¿É×öºÜ¶àPython²»·½±ã×öµÄÊÂÇ飬ËûÃÇ¿ÉÒÔÖ±½Óµ÷ÓÃC¿âºÍϵͳµ÷Óá£
ΪÁËÖ§³ÖÀ©Õ¹£¬Python API¶¨ÒåÁËһϵÁк¯Êý¡¢ºêºÍ±äÁ¿£¬ÌṩÁ˶ÔPythonÔËÐÐʱϵͳµÄ·ÃÎÊÖ§³Ö¡£PythonµÄC APIÓÉCÔ´Âë×é³É£¬²¢°üº¬ “Python.h” Í·Îļþ¡£
±àдÀ©Õ¹Ä£¿éÓëÄãµÄϵͳÏà¹Ø£¬ÏÂÃæ»áÏê½â¡£
Ŀ¼
1 Ò»¸ö¼òµ¥µÄÀý×Ó
2 ¹ØÓÚ´íÎóºÍÒì³£
3 »Øµ½Àý×Ó
4 Ä£¿é·½·¨±íºÍ³õʼ»¯º¯Êý
5 ±àÒëºÍÁ¬½Ó
6 ÔÚCÖе÷ÓÃPythonº¯Êý
7 ½âÎö´«¸øÀ©Õ¹Ä£¿éº¯ÊýµÄ²ÎÊý
8 ½âÎö´«¸øÀ©Õ¹Ä£¿éº¯ÊýµÄ¹Ø¼ü×Ö²ÎÊý
9 ¹¹ÔìÈÎÒâÖµ
10 ÒýÓüÆÊý
10.1 PythonÖеÄÒýÓüÆÊý
10.2 ÓµÓйæÔò
10.3 ΣÏյı¡±ù
10.4 NULLÖ¸Õë
11 ʹÓÃC++±àдÀ©Õ¹
12 Ìṩ¸øÆäËûÄ£¿éÒÔC API
1 Ò»¸ö¼òµ¥µÄÀý×Ó
ÏÂÃæµÄÀý×Ó´´½¨Ò»¸ ......
µ÷ÊÔkeil³ÌÐòʱÓÐʱ»á³öÏÖ¸÷ÖÖ±àÒ뾯¸æ£¬Ò»°ãÇé¿öϲ»»áÓ°Ïì³ÌÐòµÄÔËÐС£µ«³öÏÖÈçÌâWARNING:MULTIPLE CALL TO SEGMENT¾¯¸æÊ±£¬ÇëÁôÒâÄúµÄ³ÌÐòÊÇ·ñ»á·¢Éú´íÎó¡£ÉÏÊö¾¯¸æÖ¸µÄÊÇÄ㶨ÒåµÄº¯ÊýÌåÔÚÖ÷³ÌÐòÖб»µ÷Óã¬ÔÚÖжÏÖÐÒ²±»Ö±½Ó»ò¼ä½ÓµÄµ÷ÓÃÁË¡£¿ÉÏëÈôÖ÷³ÌÐòÕýÔËÐд˺¯Êýʱ£¬ÖжÏÀ´ÁÙÒ²ÔËÐÐÕâ¶Î³ÌÐòµÄ»°»á·¢Éúº¯ÊýÖØÔØÏÖÏó¡£Èô´ËÏÖÏó·¢ÉúÇÒÄãÔÚ³ÌÐòÖÐδ¼Ó´¦Àí£¬ÄÇôºÜÓпÉÄܵ¼ÖÂÄúµÄ³ÌÐò·¢Éú²»¿ÉÔ¤²âµÄ½á¹û¡£½áºÏÍøÉϲéѯµÄ½á¹ûºÍ×Ô¼ºµÄÉè¼ÆÌṩ¼¸¸ö¿ÉÐеĽâ¾ö·½·¨ÊÇ£º
1. ÀûÓùؼü×Öreentrant±íÃ÷º¯Êý¿ÉÖØÔØ
ÆÀ×¢£º¸Ã·¨ÅųýÁ˱àÒëÆ÷¾¯¸æºÍ¿ÉÄܳöÏÖµÄÖØÔØ´øÀ´µÄÓ°Ï죬µ«´Ë·½·¨ÔÚÖØÔØ·¢Éúʱ£¬ÎªÁ˱£»¤Ö÷³ÌÐòµÄ³ÌÐòÐÅÏ¢£¬ÏµÍ³»á½«³ÌÐòµÄÐÅÏ¢±£´æµ½¶ÑÕ»ÖУ¬Ôì³É¶ÑÕ»µÄ¶øÍ⸺µ£
2. Èç¹û¿Õ¼ä¶àµÄ»°£¬¿ÉÒÔ¶¨ÒåÁ½¸öͬ¹¦Äܵĺ¯Êý£¬·Ö±ðÔÚÖжϺÍÖжÏÍâµ÷ÓÃ
ÆÀ×¢£º¸Ã·½·¨²Ù×÷ÆðÀ´·½±ã£¬²»»á³öÏÖÉÏÒ»¸ö°ì·¨µÄ±×¶Ë£¬µ«±È½ÏÀË·Ñcode
3. ÀûÓú¯ÊýÖ¸Õë
ÆÀ×¢£º¸Ã·½·¨ÊʺÏÓÃÔÚÈ·¶¨ÖжϺÍÖ÷³ÌÐò²»»áͬʱµ÷Óøú¯ÊýµÄʱºò¡£Ëü²»½öÅųýÁ˱àÒëÆ÷¾¯¸æ£¬ÔÚcodeÕ¼ÓᢲÙ×÷·½Ãæ¶¼±È½ÏºÃ ......
cÓëc++ staticº¯ÊýµÄÇø±ð
±¾ÎÄת×Ô£ºhttp://blog.csdn.net/lipps/archive/2007/05/18/1615419.aspx
static¹Ø¼ü×ÖÊÇC, C++Öж¼´æÔڵĹؼü×Ö, ËüÖ÷ÒªÓÐÈýÖÖʹÓ÷½Ê½, ÆäÖÐǰÁ½ÖÖÖ»Ö¸ÔÚCÓïÑÔÖÐʹÓÃ, µÚÈýÖÖÔÚC++ÖÐʹÓÃ(C,C++ÖоßÌåϸ΢²Ù×÷²»¾¡Ïàͬ, ±¾ÎÄÒÔC++Ϊ׼).
(1)¾Ö²¿¾²Ì¬±äÁ¿
(2)Íⲿ¾²Ì¬±äÁ¿/º¯Êý
(3)¾²Ì¬Êý¾Ý³ÉÔ±/³ÉÔ±º¯Êý
ÏÂÃæ¾ÍÕâÈýÖÖʹÓ÷½Ê½¼°×¢ÒâÊÂÏî·Ö±ð˵Ã÷
Ò»¡¢¾Ö²¿¾²Ì¬±äÁ¿
ÔÚC/C++ÖÐ, ¾Ö²¿±äÁ¿°´ÕÕ´æ´¢ÐÎʽ¿É·ÖΪÈýÖÖauto, static, register
(<CÓïÑÔ³ÌÐòÉè¼Æ(µÚ¶þ°æ)>Ì·ºÆÇ¿, µÚ174-175Ò³)
ÓëautoÀàÐÍ(ÆÕͨ)¾Ö²¿±äÁ¿Ïà±È, static¾Ö²¿±äÁ¿ÓÐÈýµã²»Í¬
1. ´æ´¢¿Õ¼ä·ÖÅ䲻ͬ
autoÀàÐÍ·ÖÅäÔÚÕ»ÉÏ, ÊôÓÚ¶¯Ì¬´æ´¢Àà±ð, Õ¼¶¯Ì¬´æ´¢Çø¿Õ¼ä, º¯Êýµ÷ÓýáÊøºó×Ô¶¯ÊÍ·Å, ¶østatic·ÖÅäÔÚ¾²Ì¬´æ´¢Çø, ÔÚ³ÌÐòÕû¸öÔËÐÐÆÚ¼ä¶¼²»ÊÍ·Å. Á½ÕßÖ®¼äµÄ×÷ÓÃÓòÏàͬ, µ«Éú´æÆÚ²»Í¬.
2. static¾Ö²¿±äÁ¿ÔÚËù´¦Ä£¿éÔÚ³õ´ÎÔËÐÐʱ½øÐгõʼ»¯¹¤×÷, ÇÒÖ»²Ù×÷Ò»´Î
3. ¶ÔÓÚ¾Ö²¿¾²Ì¬±äÁ¿, Èç¹û²»¸³³õÖµ, ±àÒëÆÚ»á×Ô¶¯¸³³õÖµ0»ò¿Õ×Ö·û, ¶øautoÀàÐ͵ijõÖµÊDz»È·¶¨µÄ. (¶ÔÓÚC ......
cÓëc++ staticº¯ÊýµÄÇø±ð
±¾ÎÄת×Ô£ºhttp://blog.csdn.net/lipps/archive/2007/05/18/1615419.aspx
static¹Ø¼ü×ÖÊÇC, C++Öж¼´æÔڵĹؼü×Ö, ËüÖ÷ÒªÓÐÈýÖÖʹÓ÷½Ê½, ÆäÖÐǰÁ½ÖÖÖ»Ö¸ÔÚCÓïÑÔÖÐʹÓÃ, µÚÈýÖÖÔÚC++ÖÐʹÓÃ(C,C++ÖоßÌåϸ΢²Ù×÷²»¾¡Ïàͬ, ±¾ÎÄÒÔC++Ϊ׼).
(1)¾Ö²¿¾²Ì¬±äÁ¿
(2)Íⲿ¾²Ì¬±äÁ¿/º¯Êý
(3)¾²Ì¬Êý¾Ý³ÉÔ±/³ÉÔ±º¯Êý
ÏÂÃæ¾ÍÕâÈýÖÖʹÓ÷½Ê½¼°×¢ÒâÊÂÏî·Ö±ð˵Ã÷
Ò»¡¢¾Ö²¿¾²Ì¬±äÁ¿
ÔÚC/C++ÖÐ, ¾Ö²¿±äÁ¿°´ÕÕ´æ´¢ÐÎʽ¿É·ÖΪÈýÖÖauto, static, register
(<CÓïÑÔ³ÌÐòÉè¼Æ(µÚ¶þ°æ)>Ì·ºÆÇ¿, µÚ174-175Ò³)
ÓëautoÀàÐÍ(ÆÕͨ)¾Ö²¿±äÁ¿Ïà±È, static¾Ö²¿±äÁ¿ÓÐÈýµã²»Í¬
1. ´æ´¢¿Õ¼ä·ÖÅ䲻ͬ
autoÀàÐÍ·ÖÅäÔÚÕ»ÉÏ, ÊôÓÚ¶¯Ì¬´æ´¢Àà±ð, Õ¼¶¯Ì¬´æ´¢Çø¿Õ¼ä, º¯Êýµ÷ÓýáÊøºó×Ô¶¯ÊÍ·Å, ¶østatic·ÖÅäÔÚ¾²Ì¬´æ´¢Çø, ÔÚ³ÌÐòÕû¸öÔËÐÐÆÚ¼ä¶¼²»ÊÍ·Å. Á½ÕßÖ®¼äµÄ×÷ÓÃÓòÏàͬ, µ«Éú´æÆÚ²»Í¬.
2. static¾Ö²¿±äÁ¿ÔÚËù´¦Ä£¿éÔÚ³õ´ÎÔËÐÐʱ½øÐгõʼ»¯¹¤×÷, ÇÒÖ»²Ù×÷Ò»´Î
3. ¶ÔÓÚ¾Ö²¿¾²Ì¬±äÁ¿, Èç¹û²»¸³³õÖµ, ±àÒëÆÚ»á×Ô¶¯¸³³õÖµ0»ò¿Õ×Ö·û, ¶øautoÀàÐ͵ijõÖµÊDz»È·¶¨µÄ. (¶ÔÓÚC ......
Ŀǰ¸÷ÖÖLinux·¢Ðа涼֧³ÖUTF-8±àÂ룬µ±Ç°ÏµÍ³µÄÓïÑÔºÍ×Ö·û±àÂëÉèÖñ£´æÔÚһЩ»·¾³±äÁ¿ÖУ¬¿ÉÒÔͨ¹ýlocaleÃüÁî²é¿´£º
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
³£Óúº×ÖÒ²¶¼Î»ÓÚBMPÖУ¬ËùÒÔÒ»¸öºº×ֵĴ洢ͨ³£Õ¼3¸ö×Ö½Ú¡£ÀýÈç±à¼Ò»¸öC³ÌÐò£º
#include <stdio.h>
int main(void)
{
printf("ÄãºÃ\n");
return 0;
}
Ô´ÎļþÊÇÒÔUTF-8±àÂë´æ´¢µÄ£º
$ od -tc nihao.c
0000000 # i n c l u d e < s t d i o .
0000020 h > \n \n i n t m a i n ( v o i
0000040 d ) \n { \n \t p r i n t f ( " 344 275
0000060 240 345 245 275 \ n " ) ; \n \t r e t u r
0000100 n 0 ; \n } ......
Ŀǰ¸÷ÖÖLinux·¢Ðа涼֧³ÖUTF-8±àÂ룬µ±Ç°ÏµÍ³µÄÓïÑÔºÍ×Ö·û±àÂëÉèÖñ£´æÔÚһЩ»·¾³±äÁ¿ÖУ¬¿ÉÒÔͨ¹ýlocaleÃüÁî²é¿´£º
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
³£Óúº×ÖÒ²¶¼Î»ÓÚBMPÖУ¬ËùÒÔÒ»¸öºº×ֵĴ洢ͨ³£Õ¼3¸ö×Ö½Ú¡£ÀýÈç±à¼Ò»¸öC³ÌÐò£º
#include <stdio.h>
int main(void)
{
printf("ÄãºÃ\n");
return 0;
}
Ô´ÎļþÊÇÒÔUTF-8±àÂë´æ´¢µÄ£º
$ od -tc nihao.c
0000000 # i n c l u d e < s t d i o .
0000020 h > \n \n i n t m a i n ( v o i
0000040 d ) \n { \n \t p r i n t f ( " 344 275
0000060 240 345 245 275 \ n " ) ; \n \t r e t u r
0000100 n 0 ; \n } ......