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

C/C++½á¹¹Ìå×Ö½Ú¶ÔÆë


[×¢]£º×î½üÔÚ×öUVCÃèÊö·ûµÄ±à¼­¹¤¾ß£¬Óõ½ºÜ¶àµÄ½á¹¹£¬ÎªÁË·½±ã°Ñ½á¹¹Ìåд³ÉbinÎļþ£¬ÐèÒª°Ñ½á¹¹ÌåÖÐÌî³äµÄ×Ö½ÚÈ¥µô£¬ÔÚÍøÉÏËÑË÷µÃµ½ÕâÆªÎÄÕ£¬¸Ð¾õͦºÃµÄ£¬×ª¹ýÀ´×ö¸ö¼ÍÄî¡£
½á¹¹Ìå(struct)µÄsizeofÖµ£¬²¢²»ÊǼòµ¥µÄ½«ÆäÖи÷ÔªËØËùÕ¼×Ö½ÚÏà¼Ó£¬¶øÊÇÒª¿¼Âǵ½´æ´¢¿Õ¼äµÄ×Ö½Ú¶ÔÆëÎÊÌâ¡£ÏÈ¿´ÏÂÃæ¶¨ÒåµÄÁ½¸ö½á¹¹Ìå.
struct
{
    char a;
    short b;
    char c;
}S1;
struct
{
    char a;
    char b;
    short c;
}S2;
·Ö±ðÓóÌÐò²âÊԵóösizeof(S1)=6 , sizeof(S2)=4
¿É¼û£¬ËäÈ»Á½¸ö½á¹¹ÌåËùº¬µÄÔªËØÏàͬ£¬µ«ÒòΪÆäÖдæ·ÅµÄÔªËØÀàÐÍ˳Ðò²»Ò»Ñù£¬ËùÕ¼×Ö½ÚÒ²³öÏÖ²îÒì¡£Õâ¾ÍÊÇ×Ö½Ú¶ÔÆëÔ­Òò¡£Í¨¹ý×Ö½Ú¶ÔÆë£¬ÓÐÖúÓÚ¼Ó¿ì¼ÆËã»úµÄÈ¡ÊýËÙ¶È£¬·ñÔò¾ÍµÃ¶à»¨Ö¸ÁîÖÜÆÚ¡£
×Ö½Ú¶ÔÆëÔ­Ôò
½á¹¹ÌåĬÈϵÄ×Ö½Ú¶ÔÆëÒ»°ãÂú×ãÈý¸ö×¼Ôò£º
1) ½á¹¹Ìå±äÁ¿µÄÊ×µØÖ·Äܹ»±»Æä×î¿í»ù±¾ÀàÐͳÉÔ±µÄ´óСËùÕû³ý£»
2) ½á¹¹Ìåÿ¸ö³ÉÔ±Ïà¶ÔÓڽṹÌåÊ×µØÖ·µÄÆ«ÒÆÁ¿£¨offset£©¶¼ÊdzÉÔ±×ÔÉí´óСµÄÕûÊý±¶£¬ÈçÓÐÐèÒª±àÒëÆ÷»áÔÚ³ÉÔ±Ö®¼ä¼ÓÉÏÌî³ä×Ö½Ú£¨internal adding£©£»
3) ½á¹¹ÌåµÄ×Ü´óСΪ½á¹¹Ìå×î¿í»ù±¾ÀàÐͳÉÔ±´óСµÄÕûÊý±¶£¬ÈçÓÐÐèÒª±àÒëÆ÷»áÔÚ×îĩһ¸ö³ÉÔ±Ö®ºó¼ÓÉÏÌî³ä×Ö½Ú£¨trailing padding£©¡£
ͨ¹ýÕâÈý¸öÔ­Ôò£¬¾Í²»ÄÑÀí½âÉÏÃæÁ½¸östructµÄ²îÒìÁË.
¶ÔÓÚstruct S1, ΪÁËʹshort±äÁ¿Âú×ã×Ö½Ú¶ÔÆä×¼Ôò(2), ¼´Æä´æ´¢Î»ÖÃÏà¶ÔÓڽṹÌåÊ×µØÖ·µÄoffsetÊÇ×ÔÉí´óС(shortÕ¼2¸ö×Ö½Ú)µÄÕûÊý±¶£¬±ØÐëÔÚ×Ö½ÚaºóÃæÌî³äÒ»¸ö×Ö½ÚÒÔ¶ÔÆë£»ÔÙÓÉ×¼Ôò(3),ΪÁË Âú×ã½á¹¹Ìå×Ü´óСΪshort´óСµÄÕûÊý±¶£¬±ØÐëÔÙÔÚcºóÃæÌî³äÒ»¸ö×Ö½Ú¡£
¶ÔÓÚstruct S2, È´²»±ØÈçÉÏËùÊöµÄÌî³ä×Ö½Ú£¬ÒòΪÆäÖ±½Ó˳Ðò´æ´¢ÒѾ­Âú×ãÁË¶ÔÆë×¼Ôò¡£
Èç¹û½«ÉÏÃæÁ½¸ö½á¹¹ÌåÖеÄshort¶¼¸ÄΪint(Õ¼4¸ö×Ö½Ú), ÄÇô»áÔõôÑùÄØ£¿ ³ÌÐòµÃ³ösizeof(S1)=12, sizeof(S2)=8
ÀûÓÃÉÏÃæµÄ×¼Ôò£¬Ò²²»ÄѼÆËãµÃ³öÕâÑùµÄ½á¹û¡£S1ÖÐÔÚaºóÃæÌî³ä3¸ö×Ö½Ú¡¢ÔÚcºóÃæÌî³ä3¸ö×Ö½Ú£¬ÕâÑùÒ»¹²12¸ö×Ö½Ú£»S2ÖÐÔÚa¡¢b˳Ðò´æ´¢Ö®ºóÌî³äÁ½¸ö×Ö½ÚÓÃÒÔ¶ÔÆä£¬ÕâÑùÒ»¹²¾Í8¸ö×Ö½Ú¡£
µ±È»£¬ÔÚijЩʱºòÒ²¿ÉÒÔÉèÖÃ×Ö½Ú¶ÔÆë·½Ê½¡£Õâ¾ÍÐèҪʹÓà #pragma pack ¡£
#pragma pack(push) //ѹջ±£´æ
#pragma pack(1)// ÉèÖÃ1×Ö½Ú¶ÔÆë
struct
{
char a;
short b;
char c;
}S1;
#pragma pack(pop) // »Ö¸´ÏÈǰÉèÖÃ
ÈçÉÏËùʾ£¬½«¶ÔÆä·½Ê½ÉèΪ1×Ö½Ú¶ÔÆë£


Ïà¹ØÎĵµ£º

C/C++³ÌÐòÔ±Á½ÄêÀú³Ì (1)

  ²»Öª²»¾õÒѾ­¹¤×÷Á½ÄêÁË£¬´ÇÈ¥ÁËÔ­À´µÄ¹¤×÷£¬ÓÖÅÜ»ØÁËÎÒÉÏѧµÄµØ·½¡£½ñÌìÅÜÈ¥Ò»¼ÒÊÒÓѽéÉܵĹ«Ë¾ÃæÊÔ¡£ÎʵÃÎÊÌâͦ¼òµ¥£¬µ«ÎÒ´ðµÄÈ´Õæ²»ÔõôµØ°¡¡£»ØÀ´ÓÖÑо¿ÁËһϣ¬·¢ÏÖÕâЩÎÊÌâÎÒÓ¦¸Ã¶¼Àí½â°¡£¬Ôõôµ½±ðÈËÎÊÆðµÄʱºò¾ÍÈ«ÍüÁËÒ»°ãÄØ¡£ÏëÏëÁË·¢ÏÖ»¹ÊÇѧµÄ²»µ½Î»¡£²»½ûÓÖÏëÆðÁËÕâô¶àÄêÀ´£¬ÎÒ¶¼Ñ§µ½ÁËʲô¶«Î÷ÄØ¡£
& ......

Visual Studio 2008 ÏÂÉú³ÉC/C++ »ã±à´úÂë

ÔÚÏîÄ¿ÊôÐÔÒ³ --> ÅäÖÃÊôÐÔ --> C/C++ --> Êä³öÎļþÀïÃæ£¬½«»ã±àÊä³öµÄÏÂÀ­Áбí´ÓÎÞÁбíÑ¡ÔñΪÄãÐèÒª»ã±àÊä³öµÄÄÚÈÝ£¬±ÈÈ瓽öÁгö³ÌÐò¼¯(/FA)”£¬Èçͼ1-1£¬Í¼1-2£º
 
ͼ1-1
 
ͼ1-2
------------------------------------------------------------------------------------------------ ......

CºÍC++±à³ÌºÍѧϰÎĵµ

 CºÍC++±à³ÌºÍѧϰÎĵµ
1  :Ö¸Õë±äÁ¿Ãû³ÆÒÔpΪÊ××Ö·û£¬ÕâÊdzÌÐòԱͨ³£ÔÚ¶¨ÒåÖ¸ÕëʱµÄÒ»¸öϰ¹ß
2  :har * p;    (int *)p °ÑpÇ¿ÖÆ×ª»»ÎªintÐÍ                        ......

c¾­µäÁ´±í³ÌÐò

#include "stdio.h"
#include "malloc.h"
typedef int elemtype;
struct node
{
elemtype data;
struct node *next;
};
typedef struct node NODE;
NODE * creat(NODE *head)
{
NODE *p,*q;
elemtype i;
head=(NODE*)malloc(sizeof(NODE));
scanf("%d",&(head->data));
p=head;
......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØÍ¼ | ¸ÓICP±¸09004571ºÅ