今天看到这样一道问题,合理排列结构中元素顺序,可节省空间并增加可理解性。 解释如下:
typedef struct EXAMPLE_STRU{unsigned int valid: 1;PERSON person;unsigned int set_flg: 1;} EXAMPLE;//若改成如下形式,不仅可节省1 字节空间,可读性也变好了。typedef struct EXAMPLE_STRU{unsigned int valid: 1;unsigned int set_flg: 1;PERSON person ;} EXAMPLE;本科没有接触到位域的概念,结果一查就是一下午 先是关于位域的概念和用法详解
然后有关于内存对齐的问题:内存对齐
补充,结构体的大小为:最宽基本类型成员大小的整数倍,及,不会因为一个整型没有填满,而算半个或者其他,也就解释了一直纠结的问题
struct bs1{ int a:8; int b:2; int c:6;}cout<<sizeof(bs1)<<endl; //为4的原因规则罗列
在加倍sizeof()方法时,看到一个比较有趣的问题sizeof(‘A’) 结果:字符常量在C中长度是4,在C++中是1,VC中默认如果源文件为.c则按c编译,如果是.cpp则按C++编译
$ cat sizeof.c #include <stdio.h>int main(void){ PRintf("sizeof('A')=%d/n", (int)sizeof('A')); return 0;}$ cat sizeof.cpp#include <stdio.h>int main(void){ printf("sizeof('A')=%d/n", (int)sizeof('A')); return 0;}$ g++ -o sizeof sizeof.c && ./sizeof sizeof('A')=4$ g++ -o sizeof sizeof.cpp && ./sizeofsizeof('A')=1$ uname -msvrpAIX 3 5 0000DF13D600 powerpc还是要静下心来,面对问题。
新闻热点
疑难解答