Ò׽ؽØÍ¼Èí¼þ¡¢µ¥Îļþ¡¢Ãâ°²×°¡¢´¿ÂÌÉ«¡¢½ö160KB

CÎÊÌ⼯½õ£¨Ò»£©

Â¥Ö÷·¢±íÓÚ£º2009-07-24 10:11:03ÊÇÕâÑùµÄ,È¥Ò»¼Ò¹«Ë¾ÃæÊÔ,Óöµ½ÁËÒ»µÀcÓïÑÔµÄÌâ,¸öÈË
¸Ð¾õºÜ¹Ö,ÒÔǰû¼û¹ýÀàËÆµÄ,È»ºóÖ÷¿¼¹Ù˵ÕâÊǹØÓÚCÓïÑÔÇ¿ÈõÀàÐÍת»»Ê²Ã´µÄ,ÎҸоõËû
×Ô¼º¶¼²»ÍêÈ«Çå³þ,È»ºó»ØÀ´ÔÚÍøÉϲ鵽ÕâÊÇÓ¢¹ú½£ÇÅ´óÑ§ÍøÉϳöµÄ¼ÆËã»úÌâ :
#include <stdio.h>
#define init_employee(X,Y) {(X),(Y),wage_emp}
typedef struct Employee Em;
struct Employee {int hours,salary;int (*wage)(Em*);};
int wage_emp(Em *ths) {return ths->hours*ths->salary;}
#define init_manager(X,Y,Z) {(X),(Y),wage_man,(Z)}
typedef struct Manager Mn;
struct Manager {int hours,salary;int (*wage)(Mn*);int bonus;};
int wage_man(Mn *ths) {return ths->hours*ths->salary+ths->bonus;}
int main(void) {
Mn m = init_manager(40,10,20);
Em *e= (Em *) &m;
printf("%d\n",e->wage(e));
return 0;
}
×îºóÊä³öÊÇ420,¿ÉÎÒдµÄÊÇ400,ÓÐÇë¸ßÈËÄÜÏêϸ½âÊÍÏÂÕâÌâµÄÒâ˼ô,Ϊʲôº¯ÊýÖ¸Õëµ÷ÓÃ
µÄ²»ÊÇwage_emp,²ÎÊý¶¼²»Æ¥Åä°¢,¶øÇÒEm *e= (Em *) &mµ½µ×ÓÐʲôÒâÒå,ÒòΪËüºóÃæ»¹ÓÐ
Ìí¼ÓµÄÎÊÌâÊÇÓÃC++À´ÖØÐ´²¢ËµÃ÷ºÃ´¦,ÄÇËüÕâôʵÏÖÊÇÏëÓÃCʵÏÖ¶à̬µÄÐÔÖÊô,×ÜÖ®¸Ð¾õ
ºÜ¹Ö,Íû¸ßÈ˽â´ð!!
-------------------------------
nit_managerʱ£¬Ð´Èëµ½½á¹¹ÌåÖеÄÖ¸Õë¾ÍÊÇwage_man£¬¶ø²»ÊÇwage_emp£¬ºóÃæËäÈ»&m±»Ç¿
ÖÆ×ª»»³ÉÁËEm*ÀàÐÍ£¬µ«ÀàÐÍÇ¿ÖÆ×ª»»²¢²»»á¸Ä±ä½á¹¹Ìå±äÁ¿ÖеÄÊý¾Ý¡£Òò´ËÄǸöº¯ÊýÖ¸Õë
Ö¸ÏòµÄÈÔÈ»ÊÇwage_manÕâ¸öº¯Êý¡£
ÕâÀïÔËÓÃÁËһЩÇɺϣºËäÈ»wage_emp¸úwage_manÁ½¸öº¯ÊýµÄÇ©ÃûÊDz»Ò»ÑùµÄ£¬µ«´Óµ×²ãÀ´
¿´£¬²¢ÎÞ¶à´óÇø±ð£¬²ÎÊý¶¼ÊÇÒ»¸öËÄ×Ö½ÚµÄÖ¸Õ룬·µ»ØÖµ¶¼ÊÇint£¬Õâ¾ÍʹµÃËüÃǵĵײãµ÷
ÓûúÖÆÊÇÒ»ÑùµÄ£¬º¯Êýµ÷ÓÃÎÞ·ÇÊDzÎÊýѹջ¡¢Ö¸ÕëÌø×ªÕâÀàÖ¸Á²ÎÊýºÍ·µ»ØÖµÀàÐͶ¼Ò»
Ñù£¬µ÷ÓõÄÖ¸Áî¾Í¿Ï¶¨ÊÇÍêȫһÑùµÄ¡£
Òò´ËËäÈ»ÊÇ´«µÝÒ»¸öEm*ÀàÐ͵IJÎÊý¶øÊµ¼Êµ÷ÓõÄÊÇwage_man£¬µ«ÓÉÓÚÕâЩÇɺϣ¬±àÒëÆ÷¾Í
ÕâÑù±»Çá¶øÒ×¾ÙµØÆÛÆ­……£¬Ò²¾ÍÊÇ˵£¬×îºó±»Êµ¼Êµ÷ÓõÄwage_manÈÔÈ»°Ñ²ÎÊýµ±³ÉMn*£¬
¶øÊµ¼ÊÉÏËüÓÖȷȷʵʵÊǸöMn*£¬ÓÚÊÇÒ²²»»á³öÈκÎÎÊÌâ¡£
Èç¹ûÓÃC++À´Ð´£¬ÓÉÓÚC++ÓÐÄÚÖõØÖ§³Ö¶à̬µÄ»úÖÆ£¬¾ÍÓò»×ÅʹÓÃÕâЩÁîÈ˷ѽâµÄÆÛÆ­±à
ÒëÆ÷µÄÊÖ·¨ÁË¡£
-------------------------------
ʵ¼ÊÉϹ۲ìEmployee ºÍManager µÄ½á¹¹²»ÄÑ·¢ÏÖ
Manager Ö»ÊDZÈEm


Ïà¹ØÎĵµ£º

C ÓïÑÔÊý¾Ý¶ÔÆë

#include <stdio.h>    
struct Foo1
{
   char a;
   int  b;
   char c;
   int  d;
};
#pragma pack (2)
struct Foo2
{
   char a;
   int  b;
   char c;
   int  d; ......

´Óº¯Êý·µ»ØÒ»¸öÊý×éµÄ2ÖÖ·½·¨ (Cר¼Ò±à³Ì p230)

ÑϸñÀ´Ëµ£¬ÎÞ·¨´Óº¯Êý·µ»ØÒ»¸öÊý×飬µ«¿ÉÒÔ´Óº¯Êý·µ»ØÒ»¸öÖ¸ÏòÈκÎÊý¾Ý½á¹¹µÄÖ¸Õ룬°üÀ¨Ò»¸öÖ¸ÏòÊý×éµÄÖ¸Õë¡£
Ò»ÖÖ·½Ê½ÈçÏ£º
#include <stdio.h>
#include <stdlib.h>
int (*func())[20];//funcÊÇÒ»¸öº¯Êý£¬Ëü·µ»ØÒ»¸öÖ¸Ïò°üÀ¨20¸öintÔªËØµÄÊý×éµÄÖ¸Õë
int main(void)
{
      ......

c±àÒëÈ«¹ý³Ì

CÓïÑÔ±àÒëÈ«¹ý³Ì
    ±àÒëµÄ¸ÅÄ±àÒë³ÌÐò¶ÁȡԴ³ÌÐò£¨×Ö·ûÁ÷£©£¬¶ÔÖ®½øÐдʷ¨ºÍÓï·¨µÄ·ÖÎö£¬½«¸ß¼¶ÓïÑÔÖ¸Áîת»»Îª¹¦ÄܵÈЧµÄ»ã±à´úÂ룬ÔÙÓÉ»ã±à³ÌÐòת»»Îª»úÆ÷ÓïÑÔ£¬²¢ÇÒ°´ÕÕ²Ù×÷ϵͳ¶Ô¿ÉÖ´ÐÐÎļþ¸ñʽµÄÒªÇóÁ´½ÓÉú³É¿ÉÖ´ÐгÌÐò¡£
    ±àÒëµÄÍêÕû¹ý³Ì£ºCÔ´³ÌÐò£­£­>Ô¤±àÒë´¦Àí(.c)£­£­ ......

extern "C"

 
¡¡¡¡extern "C" °üº¬Ë«Öغ¬Ò壬´Ó×ÖÃæÉϼ´¿ÉµÃµ½£ºÊ×ÏÈ£¬±»ËüÐÞÊεÄÄ¿±êÊÇ“extern”µÄ£»Æä´Î£¬±»ËüÐÞÊεÄÄ¿±êÊÇ“C”µÄ¡£ÈÃÎÒÃÇÀ´Ïêϸ½â¶ÁÕâÁ½Öغ¬Òå¡£
¡¡¡¡£¨1£© ±»extern "C"ÏÞ¶¨µÄº¯Êý»ò±äÁ¿ÊÇexternÀàÐ͵ģ»
¡¡¡¡externÊÇC/C++ÓïÑÔÖбíÃ÷º¯ÊýºÍÈ«¾Ö±äÁ¿×÷Ó÷¶Î§£¨¿É¼ûÐÔ£©µÄ¹Ø¼ü×Ö£¬¸Ã¹ ......

extern ¡°C"×÷ÓÃ

1¡¢ÔÚcppÎļþÖе÷ÓÃcÎļþÖÐʵÏֵĺ¯ÊýµÄʱºò£¬ÐèÒªÓÃextern "C"ÉùÃ÷¸Ãº¯Êý£¬·ñÔòcpp»á°´Ãû×ָıàºóµÄ
º¯ÊýÃûÈ¥ÕҸú¯Êý¶øÕÒ²»µ½¡£
cppÎļþµ÷ÓÃcÎļþÖк¯ÊýÈçÏ£º
   cÎļþÖÐÓÐÒ»º¯Êý£º
              void Transfer(int a; char b);
&nbs ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØÍ¼ | ¸ÓICP±¸09004571ºÅ