C专家编程学习中的笔记
有趣的事。
关于结构体struct有趣的情况,不知道是我才知道,还是原来可知道的时候我的思维跑飞了。
(我决定将下面的很多部分注释掉,最后发现这些只是我最终结论的过程,其中还有部分是错误的,但是很值得留下,这样能更深刻的记住和理解。)
***********************************************************************************************************************************************************************
当结构体成员中只有char类型时,指向该结构的指针也没有,这时用sizeof计算得出的结果是总char个数之和,即有多少个char类型就占多少字节。
只要结构体成员中有其它类型时,如int,double,指针等时,sizeof计算得出的结果一定是4的整数倍。
struct node_tag0{
char test;
struct nod_tag *next;
}a;
sizeof(a) = 8;
struct node_tag1{
char test0;
char test1;
char test2;
char test3;
char test4;
}b;
sizeof(b) = 5;
struct node_tag2{
char test0;
int test1;
struct nod_tag2 *next;
}c;
sizeof(c) = 12;
struct node_tag3{
char test[15];
char test0;
char test1;
struct nod_tag3 *next;
}d;
sizeof(d) = 24;
struct node_tag4{
char test[15];
char test0;
struct nod_tag4 *next;
}e;
sizeof(e) = 20;
也就是,把结构体中所有成员所占字节数相加,假设这个和为n,则该结构所占字节数为sum = n + (4 - n%4)。
无语,最后又想起测试一下我的编译器中所有类型所占字节数,又出现情况了。
先把测的各个类型贴出来:
sizechar = 1;sizeshort = 2;sizeint = 4;sizelong = 4;sizefloat = 4;sizedouble = 8;sizelongdouble = 12.
还是上例子明白些:
struct node_tag5{
char test;
short datum;
}f;
sizeof(f) = 4;
struct node_tag6{
char test1;
char test2;
char test3;
short datum;
}m;
sizeof(m) = 6;
struct node_tag7{
char test1;
char test2;
char test3;
int test4;
short datum;
}n;
sizeof(n) = 12;
struct node_tag8{
char test1;
int test2;
short datum;
//short test3;加这一句还是12
//short test4;再加这一句变成16
}o;
sizeof(o) = 12;
struct node_tag9{
int test;
short datum;
}p;
sizeof(p) = 8;
太混乱了,再做一下总结,感觉做这的总结苍白无力,但还是力所能及的总结下。
这里很多是本人观点,可以有错,也是本人的推想。系统为了提高内存利用(32位机),当出现int这四个字节以上的时候,每次都是以四字节为一个基准来分配的。当结构体中出现short(没
有比short占更多字节存在的时候,即仅还可以有char型)这占两个字节的时候,为了节省内存空间,将会变为以一个字(两个字节)来分配。
即只要出现int或比int占更多字节的类型出现时,将会以四个字节来分配,下面这个能很好说明(也就是char,short这时会有自己独立的空间以四个字节
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库C专家编程看书笔记(3)在线全文阅读。
相关推荐: