首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

新手,送分,该如何处理

2012-03-20 
新手,送分定义一个结构体C/C++ codetypedef struct information{unsigned char ucSyncByte//1Bunsigned s

新手,送分
定义一个结构体

C/C++ code
typedef struct information{    unsigned char ucSyncByte;//1B    unsigned short usErrorPayPriorPID;//2B    unsigned char ucScrambAdaptationCounter;//1B}PIDInformation_t;PIDInformation_t stInformation = {0};

然后打印其类型
C/C++ code
printf("PIDInformation_t = %d\n", sizeof(struct information));

C/C++ code
结果是:6

很奇怪的结果,本来觉得应该是4B才对
PS:在Windows 下VC 6.0

[解决办法]
字节对齐~~
[解决办法]
http://topic.csdn.net/u/20120310/15/8af3c919-1a5c-4afa-8acc-b31faf58c7ea.html?98144
[解决办法]
LZ,结构体有自动对齐功能,

对齐后字节数应该是 结构体中占最大字节数的变量的整数倍(大于4Byte的以4记)
[解决办法]
内存对齐,参加我的博客
http://blog.csdn.net/kuzuozhou/article/details/7278555
[解决办法]
多出的2B是真实存在的,只是没有数据。楼主静下心来看看我的博客就知道咋回事了。good luck
探讨
引用:

LZ,结构体有自动对齐功能,

对齐后字节数应该是 结构体中占最大字节数的变量的整数倍(大于4Byte的以4记)

那多出来的2B是不是真实存在,到时用的时候,那2B是有数据的吗?

[解决办法]
把最后那个unsigned char 移到前面去 就是4 了

多出来的是真实存在的 但是此时没有存储有意义的数据 这样做是为了访问数据的时候 更加高效 比如:把unsigned char 移动到前面去后,按两字节取值的话,可以一次取出这两个char 型的数据,减少一次访存

热点排行