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

TOP

ǶÈëʽ¿ª·¢¡ªCÓïÑÔÃæÊÔÌâ(¶þ)
2014-11-24 01:45:57 ¡¾´ó ÖРС¡¿ ä¯ÀÀ:534´Î
Tags£ºÇ¶Èëʽ ¿ª·¢ ÓïÑÔ ÊÔÌâ
ÐíÄã¿ÉÄÜ»áÎÊ£¬¼´Ê¹²»Óùؼü×Ö const£¬Ò²»¹ÊÇÄܺÜÈÝÒ×д³ö¹¦ÄÜÕýÈ·µÄ³ÌÐò£¬ÄÇôÎÒΪʲô»¹ÒªÈç´Ë¿´Öعؼü×ÖconstÄØ£¿ÎÒÒ²Èçϵļ¸ÏÂÀíÓÉ£º
1). ¹Ø¼ü×ÖconstµÄ×÷ÓÃÊÇΪ¸ø¶ÁÄã´úÂëµÄÈË´«´ï·Ç³£ÓÐÓõÄÐÅÏ¢£¬Êµ¼ÊÉÏ£¬ÉùÃ÷Ò»¸ö²ÎÊýΪ³£Á¿ÊÇΪÁ˸æËßÁËÓû§Õâ¸ö²ÎÊýµÄÓ¦ÓÃÄ¿µÄ¡£Èç¹ûÄãÔø»¨ºÜ¶àʱ¼äÇåÀíÆäËüÈËÁôϵÄÀ¬»ø£¬Äã¾Í»áºÜ¿ìѧ»á¸ÐлÕâµã¶àÓàµÄÐÅÏ¢¡££¨µ±È»£¬¶®µÃÓÃconstµÄ³ÌÐòÔ±ºÜÉÙ»áÁôϵÄÀ¬»øÈñðÈËÀ´ÇåÀíµÄ¡££©
2). ͨ¹ý¸øÓÅ»¯Æ÷һЩ¸½¼ÓµÄÐÅÏ¢£¬Ê¹Óùؼü×ÖconstÒ²ÐíÄܲúÉú¸ü½ô´ÕµÄ´úÂë¡£
3). ºÏÀíµØʹÓùؼü×Öconst¿ÉÒÔʹ±àÒëÆ÷ºÜ×ÔÈ»µØ±£»¤ÄÇЩ²»Ï£Íû±»¸Ä±äµÄ²ÎÊý£¬·ÀÖ¹Æä±»ÎÞÒâµÄ´úÂëÐ޸ġ£¼ò¶øÑÔÖ®£¬ÕâÑù¿ÉÒÔ¼õÉÙbugµÄ³öÏÖ¡£
Volatile
8. ¹Ø¼ü×ÖvolatileÓÐʲôº¬Òâ ²¢¸ø³öÈý¸ö²»Í¬µÄÀý×Ó¡£
Ò»¸ö¶¨ÒåΪvolatileµÄ±äÁ¿ÊÇ˵Õâ±äÁ¿¿ÉÄܻᱻÒâÏë²»µ½µØ¸Ä±ä£¬ÕâÑù£¬±àÒëÆ÷¾Í²»»áÈ¥¼ÙÉèÕâ¸ö±äÁ¿µÄÖµÁË¡£¾«È·µØ˵¾ÍÊÇ£¬ÓÅ»¯Æ÷ÔÚÓõ½Õâ¸ö±äÁ¿Ê±±ØÐëÿ´Î¶¼Ð¡ÐĵØÖØжÁÈ¡Õâ¸ö±äÁ¿µÄÖµ£¬¶ø²»ÊÇʹÓñ£´æÔڼĴæÆ÷ÀïµÄ±¸·Ý¡£ÏÂÃæÊÇvolatile±äÁ¿µÄ¼¸¸öÀý×Ó£º
1). ²¢ÐÐÉ豸µÄÓ²¼þ¼Ä´æÆ÷£¨È磺״̬¼Ä´æÆ÷£©
2). Ò»¸öÖжϷþÎñ×Ó³ÌÐòÖлá·ÃÎʵ½µÄ·Ç×Ô¶¯±äÁ¿(Non-automatic variables)
3). ¶àÏß³ÌÓ¦ÓÃÖб»¼¸¸öÈÎÎñ¹²ÏíµÄ±äÁ¿
»Ø´ð²»³öÕâ¸öÎÊÌâµÄÈËÊDz»»á±»¹ÍÓ¶µÄ¡£ÎÒÈÏΪÕâÊÇÇø·ÖC³ÌÐòÔ±ºÍǶÈëʽϵͳ³ÌÐòÔ±µÄ×î»ù±¾µÄÎÊÌ⡣ǶÈëʽϵͳ³ÌÐòÔ±¾­³£Í¬Ó²¼þ¡¢Öжϡ¢RTOSµÈµÈ´ò½»µÀ£¬ËùÓÃÕâЩ¶¼ÒªÇóvolatile±äÁ¿¡£²»¶®µÃvolatileÄÚÈݽ«»á´øÀ´ÔÖÄÑ¡£
¼ÙÉè±»ÃæÊÔÕßÕýÈ·µØ»Ø´ðÁËÕâÊÇÎÊÌ⣨àÅ£¬»³ÒÉÕâ·ñ»áÊÇÕâÑù£©£¬ÎÒ½«ÉÔ΢ÉһÏ£¬¿´Ò»ÏÂÕâ¼Ò»ïÊDz»ÊÇÖ±Õý¶®µÃvolatileÍêÈ«µÄÖØÒªÐÔ¡£
1). Ò»¸ö²ÎÊý¼È¿ÉÒÔÊÇconst»¹¿ÉÒÔÊÇvolatileÂ𣿽âÊÍΪʲô¡£
2). Ò»¸öÖ¸Õë¿ÉÒÔÊÇvolatile Â𣿽âÊÍΪʲô¡£
3). ÏÂÃæµÄº¯ÊýÓÐʲô´íÎó£º
int square(volatile int *ptr)
{ return *ptr * *ptr;
} ÏÂÃæÊǴ𰸣º
1). Êǵġ£Ò»¸öÀý×ÓÊÇÖ»¶ÁµÄ״̬¼Ä´æÆ÷¡£ËüÊÇvolatileÒòΪËü¿ÉÄܱ»ÒâÏë²»µ½µØ¸Ä±ä¡£ËüÊÇconstÒòΪ³ÌÐò²»Ó¦¸ÃÊÔͼȥÐÞ¸ÄËü¡£
2). Êǵġ£¾¡¹ÜÕâ²¢²»ºÜ³£¼û¡£Ò»¸öÀý×ÓÊǵ±Ò»¸öÖзþÎñ×Ó³ÌÐòÐÞ¸ÃÒ»¸öÖ¸ÏòÒ»¸öbufferµÄÖ¸Õëʱ¡£
3). Õâ¶Î´úÂëµÄÓиö¶ñ×÷¾ç¡£Õâ¶Î´úÂëµÄÄ¿µÄÊÇÓÃÀ´·µÖ¸Õë*ptrÖ¸ÏòÖµµÄƽ·½£¬µ«ÊÇ£¬ÓÉÓÚ*ptrÖ¸ÏòÒ»¸övolatileÐͲÎÊý£¬±àÒëÆ÷½«²úÉúÀàËÆÏÂÃæµÄ´úÂ룺
int square(volatile int *ptr)
{ int a,b;
a = *ptr;
b = *ptr;
return a * b;
} ÓÉÓÚ*ptrµÄÖµ¿ÉÄܱ»ÒâÏë²»µ½µØ¸Ã±ä£¬Òò´ËaºÍb¿ÉÄÜÊDz»Í¬µÄ¡£½á¹û£¬Õâ¶Î´úÂë¿ÉÄÜ·µ²»ÊÇÄãËùÆÚÍûµÄƽ·½Öµ£¡ÕýÈ·µÄ´úÂëÈçÏ£º
long square(volatile int *ptr)
{ int a;
a = *ptr;
return a * a;
}
λ²Ù×÷£¨Bit manipulation£©
9. ǶÈëʽϵͳ×ÜÊÇÒªÓû§¶Ô±äÁ¿»ò¼Ä´æÆ÷½øÐÐλ²Ù×÷¡£¸ø¶¨Ò»¸öÕûÐͱäÁ¿a£¬Ð´Á½¶Î´úÂ룬µÚÒ»¸öÉèÖÃaµÄbit 3£¬µÚ¶þ¸öÇå³ýa µÄbit 3¡£ÔÚÒÔÉÏÁ½¸ö²Ù×÷ÖУ¬Òª±£³ÖÆäËüλ²»±ä¡£
¶ÔÕâ¸öÎÊÌâÓÐÈýÖÖ»ù±¾µÄ·´Ó¦
1). ²»ÖªµÀÈçºÎÏÂÊÖ¡£¸Ã±»ÃæÕß´Óû×ö¹ýÈκÎǶÈëʽϵͳµÄ¹¤×÷¡£
2). ÓÃbit fields¡£Bit fieldsÊDZ»ÈÓµ½CÓïÑÔËÀ½ÇµÄ¶«Î÷£¬Ëü±£Ö¤ÄãµÄ´úÂëÔÚ²»Í¬±àÒëÆ÷Ö®¼äÊDz»¿ÉÒÆÖ²µÄ£¬Í¬Ê±Ò²±£Ö¤Á˵ÄÄãµÄ´úÂëÊDz»¿ÉÖØÓõġ£ÎÒ×î½ü²»ÐÒ¿´µ½ InfineonΪÆä½Ï¸´ÔÓµÄͨÐÅоƬдµÄÇý¶¯³ÌÐò£¬ËüÓõ½ÁËbit fieldsÒò´ËÍêÈ«¶ÔÎÒÎÞÓã¬ÒòΪÎҵıàÒëÆ÷ÓÃÆäËüµÄ·½Ê½À´ÊµÏÖbit fieldsµÄ¡£´ÓµÀµÂ½²£ºÓÀÔ¶²»ÒªÈÃÒ»¸ö·ÇǶÈëʽµÄ¼Ò»ïճʵ¼ÊÓ²¼þµÄ±ß¡£
3). Óà #defines ºÍ bit masks ²Ù×÷¡£ÕâÊÇÒ»¸öÓм«¸ß¿ÉÒÆÖ²ÐԵķ½·¨£¬ÊÇÓ¦¸Ã±»Óõ½µÄ·½·¨¡£×î¼ÑµÄ½â¾ö·½°¸ÈçÏ£º
#define BIT3 (0x1<<3)
static int a;
void set_bit3(void)
{ a |= BIT3;
} void clear_bit3(void)
{ a &= ~BIT3;
} һЩÈËϲ»¶ÎªÉèÖúÍÇå³ýÖµ¶ø¶¨ÒåÒ»¸öÑÚÂëͬʱ¶¨ÒåһЩ˵Ã÷³£Êý£¬ÕâÒ²ÊÇ¿ÉÒÔ½ÓÊܵġ£ÎÒÏ£Íû¿´µ½¼¸¸öÒªµã£ºËµÃ÷³£Êý¡¢|=ºÍ&=~²Ù×÷¡£
10. ǶÈëʽϵͳ¾­³£¾ßÓÐÒªÇó³ÌÐòԱȥ·ÃÎÊijÌض¨µÄÄÚ´æλÖõÄÌص㡣ÔÚij¹¤³ÌÖУ¬ÒªÇóÉèÖÃÒ»¾ø¶ÔµØַΪ0x67a9µÄÕûÐͱäÁ¿µÄֵΪ0xaa66¡£±àÒëÆ÷ÊÇÒ»¸ö´¿´âµÄANSI±àÒëÆ÷¡£Ð´´úÂëÈ¥Íê³ÉÕâÒ»ÈÎÎñ¡£
ÕâÒ»ÎÊÌâ²âÊÔÄãÊÇ·ñÖªµÀΪÁË·ÃÎÊÒ»¾ø¶ÔµØÖ·°ÑÒ»¸öÕûÐÍÊýÇ¿ÖÆת»»£¨typecast£©ÎªÒ»Ö¸ÕëÊǺϷ¨µÄ¡£ÕâÒ»ÎÊÌâµÄʵÏÖ·½Ê½ËæןöÈË·ç¸ñ²»Í¬¶ø²»Í¬¡£µäÐ͵ÄÀàËÆ´úÂëÈçÏ£º
int *ptr;
ptr = (int *)0x67a9;
*ptr = 0xaa55;
Ò»¸ö½Ï»ÞɬµÄ·½·¨ÊÇ£º
*(int * const)(0x67a9) = 0xaa55;
¼´Ê¹ÄãµÄƷζ¸ü½Ó½üµÚ¶þÖÖ·½°¸£¬µ«ÎÒ½¨ÒéÄãÔÚÃæÊÔʱʹÓõÚÒ»ÖÖ·½°¸¡£
Öжϣ¨Interrupts£©
11. ÖжÏÊÇǶÈëʽϵͳÖÐÖØÒªµÄ×é³É²¿·Ö£¬Õâµ¼ÖÂÁ˺ܶà±àÒ뿪·¢ÉÌÌṩһÖÖÀ©Õ¹¡ªÈñê×¼CÖ§³ÖÖжϡ£¾ß´ú±íÊÂʵÊÇ£¬²úÉúÁËÒ»¸öеĹؼü×Ö __interrupt¡£ÏÂÃæµÄ´úÂë¾ÍʹÓÃÁË__interrupt¹Ø¼ü×ÖÈ¥¶¨ÒåÁËÒ»¸öÖжϷþÎñ×Ó³ÌÐò(ISR)£¬ÇëÆÀÂÛÒ»ÏÂÕâ¶Î´úÂëµÄ¡£
__interrupt double compute_area (double radius)
{ double area = PI * radius * radius;
printf(" Area = %f", area);
return area;
}
Õâ¸öº¯ÊýÓÐÌ«¶àµÄ´íÎóÁË£¬ÒÔÖÁÈÃÈ˲»Öª´ÓºÎ˵ÆðÁË£º
1). ISR ²»ÄÜ·µ»ØÒ»¸öÖµ¡£Èç¹ûÄã²»¶®Õâ¸ö£¬ÄÇôÄã²»»á±»¹ÍÓõġ£
2). ISR ²»ÄÜ´«µÝ²ÎÊý¡£Èç¹ûÄãûÓп´µ½ÕâÒ»µã£¬Äã±»¹ÍÓõĻú»áµÈͬµÚÒ»Ïî¡£
3). ÔÚÐí¶àµÄ´¦ÀíÆ÷/±àÒëÆ÷ÖУ¬¸¡µãÒ»°ã¶¼ÊDz»¿ÉÖØÈëµÄ¡£ÓÐЩ´¦ÀíÆ÷/±àÒëÆ÷ÐèÒªÈöµÄ¼Ä´æÆ÷ÈëÕ»£¬ÓÐЩ´¦ÀíÆ÷/±àÒëÆ÷¾ÍÊDz»ÔÊÐíÔÚISRÖÐ×ö¸¡µãÔËËã¡£´ËÍ⣬ISRÓ¦¸ÃÊǶ̶øÓÐЧÂʵģ¬ÔÚISRÖÐ×ö¸¡µãÔËËãÊDz»Ã÷Öǵġ£
4). ÓëµÚÈýµãÒ»ÂöÏà³Ð£¬printf()¾­³£ÓÐÖØÈëºÍÐÔÄÜÉϵÄÎÊÌâ¡£Èç¹ûÄ㶪µôÁ˵ÚÈýºÍµÚËĵ㣬ÎÒ²»»á̫ΪÄÑÄãµÄ¡£²»ÓÃ˵£¬Èç¹ûÄãÄܵõ½ºóÁ½µã£¬ÄÇôÄãµÄ±»¹ÍÓÃÇ°¾°Ô½À´Ô½¹âÃ÷ÁË¡£
´úÂëÀý×Ó£¨Code examples£©
12 . ÏÂÃæµÄ´úÂëÊä³öÊÇʲô£¬ÎªÊ²Ã´£¿
void foo(void)
{ unsigned int a = 6;
int b = -20;
(a+b > 6) puts(¡°> 6¡å) : puts(¡°<= 6");
}
Õâ¸öÎÊÌâ²âÊÔÄãÊÇ·ñ¶®µÃCÓïÑÔÖеÄÕûÊý×Ô¶¯×ª»»Ô­Ôò£¬ÎÒ·¢ÏÖÓÐЩ¿ª·¢Õ߶®µÃ¼«ÉÙÕâЩ¶«Î÷¡£²»¹ÜÈçºÎ£¬ÕâÎÞ·ûºÅÕûÐÍÎÊÌâµÄ´ð°¸ÊÇÊä³öÊÇ¡°>6¡±¡£Ô­ÒòÊǵ±±í´ïʽÖдæÔÚÓзûºÅÀàÐͺÍÎÞ·ûºÅÀàÐÍʱËùÓеIJÙ×÷Êý¶¼×Ô¶¯×ª»»ÎªÎÞ·ûºÅÀàÐÍ¡£Òò´Ë-20±ä³ÉÁËÒ»¸ö·Ç³£´óµÄÕýÕûÊý£¬ËùÒԸñí´ïʽ¼ÆËã³öµÄ½á¹û´óÓÚ6¡£ÕâÒ»µã¶ÔÓÚÓ¦µ±Æµ·±Óõ½ÎÞ·ûºÅÊý¾ÝÀàÐ͵ÄǶÈëʽϵͳÀ´ËµÊÇ·á³£ÖØÒªµÄ¡£Èç¹ûÄã´ð´íÁËÕâ¸öÎÊÌ⣬ÄãÒ²¾Íµ½Á˵ò»µ½Õâ·Ý¹¤×÷µÄ±ßÔµ¡£
13. ÆÀ¼ÛÏÂÃæµÄ´úÂëƬ¶Ï£º
unsigned int zero = 0;
unsigned int compzero = 0xFFFF;
/*1¡äs complement of zero */
¶ÔÓÚÒ»¸öintÐͲ»ÊÇ16λµÄ´¦ÀíÆ÷Ϊ˵£¬ÉÏÃæµÄ´úÂëÊDz»ÕýÈ·µÄ¡£Ó¦±àдÈçÏ£º
unsigned int compzero = ~0;
ÕâÒ»ÎÊÌâÕæÕýÄܽÒ¶³öÓ¦ÊÔÕßÊÇ·ñ¶®µÃ´¦ÀíÆ÷×Ö³¤µÄÖØÒªÐÔ¡£ÔÚÎҵľ­ÑéÀºÃµÄǶÈëʽ³ÌÐòÔ±·Ç³£×¼È·µØÃ÷°×Ó²¼þµÄϸ½ÚºÍËüµÄ¾ÖÏÞ£¬È»¶øPC»ú³ÌÐòÍùÍù°ÑÓ²¼þ×÷Ϊһ¸öÎÞ·¨±ÜÃâµÄ·³ÄÕ¡£
µ½ÁËÕâ¸ö½×¶Î£¬Ó¦ÊÔÕß»òÕßÍêÈ«´¹Í·É¥ÆøÁË»òÕßÐÅÐÄÂúÂúÖ¾Ôڱصá£Èç¹ûÏÔȻӦÊÔÕß²»ÊǺܺã¬ÄÇôÕâ¸ö²âÊÔ¾ÍÔÚÕâÀï½áÊøÁË¡£µ«Èç¹ûÏÔȻӦÊÔÕß×öµÃ²»´í£¬ÄÇôÎÒ¾ÍÈÓ³öÏÂÃæµÄ×·¼ÓÎÊÌ⣬ÕâЩÎÊÌâÊDZȽÏÄѵģ¬ÎÒÏë½ö½ö·Ç³£ÓÅÐãµÄÓ¦ÊÔÕßÄÜ×öµÃ²»´í¡£Ìá³öÕâЩÎÊÌ⣬ÎÒÏ£Íû¸ü¶à¿´µ½Ó¦ÊÔÕßÓ¦¸¶ÎÊÌâµÄ·½·¨£¬¶ø²»ÊǴ𰸡£²»¹ÜÈçºÎ£¬Äã¾Íµ±ÊÇÕâ¸öÓéÀÖ°É¡­
¶¯Ì¬ÄÚ´æ·ÖÅ䣨Dynamic memory allocation£©
14. ¾¡¹Ü²»Ïñ·ÇǶÈëʽ¼ÆËã»úÄÇô³£¼û£¬Ç¶Èëʽϵͳ»¹ÊÇÓдӶѣ¨heap£©Öж¯Ì¬·ÖÅäÄÚ´æµÄ¹ý³ÌµÄ¡£ÄÇôǶÈëʽϵͳÖУ¬¶¯Ì¬·ÖÅäÄÚ´æ¿ÉÄÜ·¢ÉúµÄÎÊÌâÊÇʲô£¿
ÕâÀÎÒÆÚÍûÓ¦ÊÔÕßÄÜÌáµ½ÄÚ´æËéƬ£¬ËéƬÊÕ¼¯µÄÎÊÌ⣬±äÁ¿µÄ³ÖÐÐʱ¼äµÈµÈ¡£Õâ¸öÖ÷ÌâÒѾ­ÔÚESPÔÓÖ¾Öб»¹ã·ºµØÌÖÂÛ¹ýÁË£¨Ö÷ÒªÊÇ P.J. Plauger, ËûµÄ½âÊÍÔ¶Ô¶³¬¹ýÎÒÕâÀïÄÜÌáµ½µÄÈκνâÊÍ£©£¬ËùÓлعýÍ·¿´Ò»ÏÂÕâЩÔÓÖ¾°É£¡ÈÃÓ¦ÊÔÕß½øÈëÒ»ÖÖÐé¼ÙµÄ°²È«¸Ð¾õºó£¬ÎÒÄóöÕâôһ¸öС½ÚÄ¿£ºÏÂÃæµÄ´úÂëƬ¶ÎµÄÊä³öÊÇʲô£¬ÎªÊ²Ã´£¿
char *ptr;
if ((ptr = (char *)malloc(0)) == NULL)
puts(¡°Got a null pointer¡±);
else
puts(¡°Got a valid pointer¡±);
ÕâÊÇÒ»¸öÓÐȤµÄÎÊÌâ¡£×î½üÔÚÎÒµÄÒ»¸öͬʲ»¾­Òâ°Ñ0Öµ´«¸øÁ˺¯Êýmalloc£¬µÃµ½ÁËÒ»¸öºÏ·¨µÄÖ¸ÕëÖ®ºó£¬ÎÒ²ÅÏëµ½Õâ¸öÎÊÌâ¡£Õâ¾ÍÊÇÉÏÃæµÄ´úÂ룬¸Ã´úÂëµÄÊä³öÊÇ¡°Got a valid pointer¡±¡£ÎÒÓÃÕâ¸öÀ´¿ªÊ¼ÌÖÂÛÕâÑùµÄÒ»ÎÊÌ⣬¿´¿´±»ÃæÊÔÕßÊÇ·ñÏëµ½¿âÀý³ÌÕâÑù×öÊÇÕýÈ·¡£µÃµ½ÕýÈ·µÄ´ð°¸¹ÌÈ»ÖØÒª£¬µ«½â¾öÎÊÌâµÄ·½·¨ºÍÄã×ö¾ö¶¨µÄ»ù±¾Ô­Àí¸üÖØҪЩ¡£
Typedef
15. Typedef ÔÚCÓïÑÔÖÐƵ·±ÓÃÒÔÉùÃ÷Ò»¸öÒѾ­´æÔÚµÄÊý¾ÝÀàÐ͵ÄͬÒå×Ö¡£Ò²¿ÉÒÔÓÃÔ¤´¦ÀíÆ÷×öÀàËƵÄÊ¡£ÀýÈ磬˼¿¼Ò»ÏÂÏÂÃæµÄÀý×Ó£º
#define dPS struct s *
typedef struct s * tPS;
ÒÔÉÏÁ½ÖÖÇé¿öµÄÒâͼ¶¼ÊÇÒª¶¨ÒådPS ºÍ tPS ×÷Ϊһ¸öÖ¸Ïò½á¹¹sÖ¸Õë¡£ÄÄÖÖ·½·¨¸üºÃÄØ£¿£¨Èç¹ûÓеĻ°£©ÎªÊ²Ã´£¿
ÕâÊÇÒ»¸ö·Ç³£Î¢ÃîµÄÎÊÌ⣬ÈκÎÈË´ð¶ÔÕâ¸öÎÊÌ⣨Õýµ±µÄÔ­Òò£©ÊÇÓ¦µ±±»¹§Ï²µÄ¡£´ð°¸ÊÇ£ºtypedef¸üºÃ¡£Ë¼¿¼ÏÂÃæµÄÀý×Ó£º
dPS p1,p2;
tPS p3,p4;
µÚÒ»¸öÀ©Õ¹Îª
struct s * p1, p2;
ÉÏÃæµÄ´úÂ붨Òåp1Ϊһ¸öÖ¸Ïò½á¹¹µÄÖ¸£¬p2Ϊһ¸öʵ¼ÊµÄ½á¹¹£¬ÕâÒ²Ðí²»ÊÇÄãÏëÒªµÄ¡£µÚ¶þ¸öÀý×ÓÕýÈ·µØ¶¨ÒåÁËp3 ºÍp4 Á½¸öÖ¸Õë¡£
»ÞɬµÄÓï·¨
16. CÓïÑÔͬÒâһЩÁîÈËÕ𾪵Ľṹ,ÏÂÃæµÄ½á¹¹ÊǺϷ¨µÄÂð£¬Èç¹ûÊÇËü×öЩʲô£¿
int a = 5, b = 7, c;
c = a+++b;
Õâ¸öÎÊÌ⽫×öΪÕâ¸ö²âÑéµÄÒ»¸öÓä¿ìµÄ½áβ¡£²»¹ÜÄãÏ಻ÏàÐÅ£¬ÉÏÃæµÄÀý×ÓÊÇÍêÈ«ºÏºõÓï·¨µÄ¡£ÎÊÌâÊDZàÒëÆ÷ÈçºÎ´¦ÀíËü£¿Ë®Æ½²»¸ßµÄ±àÒë×÷Õßʵ¼ÊÉÏ»áÕùÂÛÕâ¸öÎÊÌ⣬¸ù¾Ý×î´¦ÀíÔ­Ôò£¬±àÒëÆ÷Ó¦µ±ÄÜ´¦Àí¾¡¿ÉÄÜËùÓкϷ¨µÄÓ÷¨¡£Òò´Ë£¬ÉÏÃæµÄ´úÂë±»´¦Àí³É£º
c = a++ + b;
Òò´Ë, Õâ¶Î´úÂë³ÖÐкóa = 6, b = 7, c = 12¡£
Èç¹ûÄãÖªµÀ´ð°¸£¬»ò²Â³öÕýÈ·´ð°¸£¬×öµÃºÃ¡£Èç¹ûÄã²»ÖªµÀ´ð°¸£¬ÎÒÒ²²»°ÑÕâ¸öµ±×÷ÎÊÌâ¡£ÎÒ·¢ÏÖÕâ¸öÎÊÌâµÄ×î´óºÃ´¦ÊÇ:ÕâÊÇÒ»¸ö¹ØÓÚ´úÂë±àд·ç¸ñ£¬´úÂëµÄ¿É¶ÁÐÔ£¬´úÂëµÄ¿ÉÐÞ¸ÄÐԵĺõĻ°Ìâ
What will print out
main()
{ char *p1=¡°name¡±;
char *p2;
p2=(char*)malloc(20);
memset (p2, 0, 20);
while(*p2++ = *p1++);
printf(¡°%sn¡±,p2);
}
Answer:empty string.
What will be printed as the result of the operation below:
main()
{ int x=20,y=35;
x=y++ + x++;
y= ++y + ++x;
printf(¡°%d%dn¡±,x,y);
}
Answer : 5794
What will be printed as the result of the operation below:
main()
{ int x=5;
printf(¡°%d,%d,%dn¡±,x,x< <2,x>>2);
}
Answer: 5,20,1
What will be printed as the result of the operation below:
#define swap(a,b) a=a+b;b=a-b;a=a-b;
void main()
{ int x=5, y=10;
swap (x,y);
printf(¡°%d %dn¡±,x,y);
swap2(x,y);
printf(¡°%d %dn¡±,x,y);
}
int swap2(int a, int b)
{ int temp;
temp=a;
b=a;
a=temp;
return 0;
}
Answer: 10, 5
10, 5
What will be printed as the result of the operation below:
main()
{ char *ptr = ¡± Cisco Systems¡±;
*ptr++; printf(¡°%sn¡±,ptr);
ptr++;
printf(¡°%sn¡±,ptr);
}
Answer:Cisco Systems
isco systems
What will be printed as the result of the operation below:
main()
{ char s1[]=¡°Cisco¡±;
char s2[]= ¡°systems¡±;
printf(¡°%s¡±,s1);
} Answer: Cisco
What will be printed as the result of the operation below:
main()
{ char *p1;
char *p2;
p1=(char *)malloc(25);
p2=(char *)malloc(25);
strcpy(p1,¡±Cisco¡±);
strcpy(p2,¡°systems¡±);
strcat(p1,p2);
printf(¡°%s¡±,p1);
}
Answer: Ciscosystems
The following variable is available in file1.c, who can access it :
static int average;
Answer: all the functions in the file1.c can access the variable.
WHat will be the result of the following code
#define TRUE 0 // some code
while(TRUE)
{
// some code
}
Answer: This will not go into the loop as TRUE is defined as 0.
What will be printed as the result of the operation below:
int x;
int modifyvalue()
{ return(x+=10);
} int changeva lue(int x)
{ return(x+=1);
}
void main()
{ int x=10;
x++;
changeva lue(x);
x++;
modifyvalue();
printf(¡°First output:%dn¡±,x);
x++;
changeva lue(x);
printf(¡°Second output:%dn¡±,x);
modifyvalue();
printf(¡°Third output:%dn¡±,x);
}
Answer: 12 , 13 , 13
What will be printed as the result of the operation below:
main()
{ int x=10, y=15;
x = x++;
y = ++y;
printf(¡°%d %dn¡±,x,y);
}
Answer: 11, 16
What will be printed as the result of the operation below:
main()
{ int a=0;
if(a==0)
printf(¡°Cisco Systemsn¡±);
printf(¡°Cisco Systemsn¡±);
}
Answer: Two lines with ¡°Cisco Systems¡± will be printed.
ÔٴθüÐÂC++Ïà¹ØÌ⼯
1. ÒÔÏÂÈýÌõÊä³öÓï¾ä·Ö±ðÊä³öʲô£¿[CÒ×]
char str1[] = ¡°abc¡±;
char str2[] = ¡°abc¡±;
const char str3[] = ¡°abc¡±;
const char str4[] = ¡°abc¡±;
const char* str5 = ¡°abc¡±;
const char* str6 = ¡°abc¡±;
cout << boolalpha << ( str1==str2 ) << endl; // Êä³öʲô£¿
cout << boolalpha << ( str3==str4 ) << endl; // Êä³öʲô£¿
cout << boolalpha << ( str5==str6 ) << endl; // Êä³öʲô£¿
13. ·ÇC++ÄÚ½¨Ðͱð A ºÍ B£¬ÔÚÄļ¸ÖÖÇé¿öÏÂBÄÜÒþʽת»¯ÎªA£¿[C++ÖеÈ]
´ð£º
a. class B : public A { ¡­¡­} // B¹«Óм̳Ð×ÔA£¬¿ÉÒÔÊǼä½Ó¼Ì³ÐµÄ
b. class B { operator A( ); } // BʵÏÖÁËÒþʽת»¯ÎªAµÄת»¯
c. class A { A( const B& ); } // AʵÏÖÁËnon-explicitµÄ²ÎÊýΪB£¨¿ÉÒÔÓÐÆäËû´øĬÈÏÖµµÄ²ÎÊý£©¹¹Ô캯Êý
d. A& operator= ( const A& ); // ¸³Öµ²Ù×÷£¬Ëä²»ÊÇÕý×ÚµÄÒþʽÀàÐÍת»»£¬µ«Ò²¿ÉÒÔÃãÇ¿ËãÒ»¸ö
12. ÒÔÏ´úÂëÖеÄÁ½¸ösizeofÓ÷¨ÓÐÎÊÌâÂð£¿[CÒ×]
void UpperCase( char str[] ) // ½« str ÖеÄСд×Öĸת»»³É´óд×Öĸ
{ for( size_t i=0; i if( 'a'<=str[i] && str[i]<='z' )
str[i] -= ('a'-'A' );
} char str[] = "aBcDe";
cout << "str×Ö·û³¤¶ÈΪ: " << sizeof(str)/sizeof(str[0]) << endl;
UpperCase( str );
cout << str << endl;
7. ÒÔÏ´úÂëÓÐʲôÎÊÌ⣿[CÄÑ]
void char2Hex( char c ) // ½«×Ö·ûÒÔ16½øÖƱíʾ
{ char ch = c/0x10 + '0'; if( ch > ¡¯9¡ä ) ch += (¡®A¡¯-¡¯9¡ä-1);
char cl = c%0¡Á10 + ¡¯0¡ä; if( cl > ¡¯9¡ä ) cl += (¡®A¡¯-¡¯9¡ä-1);
cout << ch << cl << ' ';
} char str[] = "I love Öйú";
for( size_t i=0; i char2Hex( str[i] );
cout << endl;
4. ÒÔÏ´úÂëÓÐʲôÎÊÌ⣿[C++Ò×]
struct Test
{ Test( int ) {}
Test() {}
void fun() {}
};
void main( void )
{ Test a(1);
a.fun();
Test b();
b.fun();
}
5. ÒÔÏ´úÂëÓÐʲôÎÊÌ⣿[C++Ò×]
cout << (true 1:"1") << endl;
8. ÒÔÏ´úÂëÄܹ»±àÒëͨ¹ýÂð£¬ÎªÊ²Ã´£¿[C++Ò×]
unsigned int const size1 = 2;
char str1[ size1 ];
unsigned int temp = 0;
cin >> temp;
unsigned int const size2 = temp;
char str2[ size2 ];
9. ÒÔÏ´úÂëÖеÄÊä³öÓï¾äÊä³ö0Âð£¬ÎªÊ²Ã´£¿[C++Ò×]
struct CLS
{ int m_i;
CLS( int i ) : m_i(i) {}
CLS()
{ CLS(0);
} };
CLS obj;
cout << obj.m_i << endl;
10. C++ÖеĿÕÀ࣬ĬÈϲúÉúÄÄЩÀà³ÉÔ±º¯Êý£¿[C++Ò×]
´ð£º
class Empty
{ public:
Empty(); // ȱʡ¹¹Ô캯Êý
Empty( const Empty& ); // ¿½±´¹¹Ô캯Êý
~Empty(); // Îö¹¹º¯Êý
Empty& operator=( const Empty& ); // ¸³ÖµÔËËã·û
Empty* operator&(); // È¡Ö·ÔËËã·û
const Empty* operator&() const; // È¡Ö·ÔËËã·û const
};
3. ÒÔÏÂÁ½ÌõÊä³öÓï¾ä·Ö±ðÊä³öʲô£¿[C++ÄÑ]
float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl;
cout << boolalpha << ( (int)a == (int&)a ) << endl; // Êä³öʲô£¿
float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ( (int)b == (int&)b ) << endl; // Êä³öʲô£¿
2. ÒÔÏ·´Ïò±éÀúarrayÊý×éµÄ·½·¨ÓÐʲô´íÎó£¿[STLÒ×]
vector array;
array.push_back( 1 );
array.push_back( 2 );
array.push_back( 3 );
for( vector::size_type i=array.size()-1; i>=0; ¨Ci ) // ·´Ïò±éÀúarrayÊý×é
{ cout << array[i] << endl;
}
6. ÒÔÏ´úÂëÓÐʲôÎÊÌ⣿[STLÒ×]
typedef vector IntArray;
IntArray array;
array.push_back( 1 );
array.push_back( 2 );
array.push_back( 2 );
array.push_back( 3 );
// ɾ³ýarrayÊý×éÖÐËùÓеÄ2
for( IntArray::iterator itor=array.begin(); itor!=array.end(); ++itor )
{ if( 2 == *itor ) array.erase( itor );
}
11. дһ¸öº¯Êý£¬Íê³ÉÄÚ´æÖ®¼äµÄ¿½±´¡£[¿¼ÂÇÎÊÌâÊÇ·ñÈ«Ãæ]
´ð£º
void* mymemcpy( void *dest, const void *src, size_t count )
{
char* pdest = static_cast ( dest );
const char* psrc = static_cast ( src );
if( pdest>psrc && pdest {
for( size_t i=count-1; i!=-1; ¨Ci )
pdest[i] = psrc[i];
}
else
{
for( size_t i=0; i pdest[i] = psrc[i];
}
return dest;
}
int main( void )
{
char str[] = ¡°0123456789¡å;
mymemcpy( str+1, str+0, 9 );
cout << str << endl;


system( ¡°Pause¡± );
return 0;
}


Ê×Ò³ ÉÏÒ»Ò³ 1 2 ÏÂÒ»Ò³ βҳ 2/2/2
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
ÉÏһƪ£º¶ÁÎļþfile1.txtµÄÄÚÈÝ,Êä³öµ½fil.. ÏÂһƪ£ºPHPÀïÃæ×Ö·û´®º¯Êý¶¼ÓÐÄÄЩ£¿

×îÐÂÎÄÕÂ

ÈÈÃÅÎÄÕÂ

Hot ÎÄÕÂ

Python

C ÓïÑÔ

C++»ù´¡

´óÊý¾Ý»ù´¡

linux±à³Ì»ù´¡

C/C++ÃæÊÔÌâÄ¿