C语言结构体大小
2016-04-14 15:47
274 查看
吐血总结,在两次笔试题中都遇到,特总结如下:
P表示偏移量,D表示大小,sum为总大小;
规则1:P(i)能整除以D(i);
规则2:sum能整除以每个D(i);
规则3:sum=last_P(i)+last_D(I);总大小等于最后一个成员的偏移量加上最后一个成员的大小
struct stu1 ////12
{
int i;
char c;
int j;
};
struct stu2 ////8
{
int k;
short t;
};
struct stu3 ////12
{
char c1;
int i;
char c2;
}
struct stu4 ////8
{
char c1;
char c2;
int i;
}
如果结构体中的成员又是另外一种结构体类型时应该怎么计算呢?只需把其展开即可。但有一点需要注意,展开后的结构体的第一个成员的偏移量应当是被展开的结构体中最大的成员的整数倍。看下面的例子:
struct stu5 ////16
{
short i;
struct
{
char c;
int j;
} ss;
int k;
}
结构体stu5的成员ss.c的偏移量应该是4,而不是2。整个结构体大小应该是16。
P表示偏移量,D表示大小,sum为总大小;
规则1:P(i)能整除以D(i);
规则2:sum能整除以每个D(i);
规则3:sum=last_P(i)+last_D(I);总大小等于最后一个成员的偏移量加上最后一个成员的大小
struct stu1 ////12
{
int i;
char c;
int j;
};
struct stu2 ////8
{
int k;
short t;
};
struct stu3 ////12
{
char c1;
int i;
char c2;
}
struct stu4 ////8
{
char c1;
char c2;
int i;
}
如果结构体中的成员又是另外一种结构体类型时应该怎么计算呢?只需把其展开即可。但有一点需要注意,展开后的结构体的第一个成员的偏移量应当是被展开的结构体中最大的成员的整数倍。看下面的例子:
struct stu5 ////16
{
short i;
struct
{
char c;
int j;
} ss;
int k;
}
结构体stu5的成员ss.c的偏移量应该是4,而不是2。整个结构体大小应该是16。
// Endian_1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include <iostream> using namespace std; typedef struct node1 { int a[100]; char b; }sa; typedef struct node2 { int a; char b; }sb; typedef struct node3 { int a; double b; }sc; typedef struct node4 { long long b; //long long是8B,long是4B char a; }sd; typedef struct node5 { unsigned short s1;///unsigned short 和short都是2B unsigned short s2; }se; typedef struct node6 { unsigned short s1; int i; unsigned short s2; }sf; typedef struct node7 { unsigned short s1; unsigned short s2; int i; /// }sg; typedef struct node8 { int i; char c; int j; }sh; struct stu5 { short i; struct { char c; int j; } ss; int k; }; int _tmain(int argc, _TCHAR* argv[]) { cout<<sizeof(sa)<<endl;///404 cout<<sizeof(sb)<<endl;///8 cout<<sizeof(sc)<<endl;///16 cout<<sizeof(sd)<<endl;///16 cout<<sizeof(se)<<endl;///4 cout<<sizeof(sf)<<endl;///12 cout<<sizeof(sg)<<endl;///8 cout<<sizeof(sh)<<endl;//12 cout<<sizeof(stu5)<<endl;//16 system("pause"); return 0; }环境: win7 64,vs2010
相关文章推荐
- C#获取文件夹及文件的大小与占用空间的方法
- 调整SQLServer2000运行中数据库结构
- C#中结构体和字节数组转换实现
- 解析结构体的定义及使用详解
- 减小VC6编译生成的exe文件的大小的方法
- c#入门之枚举和结构体使用详解(控制台接收字符串以相反的方向输出)
- JavaScript限定图片显示大小的方法
- JavaScript获取元素尺寸和大小操作总结
- Delphi实现获取磁盘空间大小的方法
- JS+css 图片自动缩放自适应大小
- Javascript获取窗口(容器)的大小及位置参数列举及简要说明
- PHP 上传文件大小限制
- javascript 客户端验证上传图片的大小(兼容IE和火狐)
- C++基础入门教程(三):数组、字符串、结构体、共用体
- 用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
- C/C++语言中结构体的内存分配小例子
- 解析mysql中如何获得数据库的大小
- C#中使用反射获取结构体实例及思路
- 结构体类型数据作为函数参数(三种方法)
- Linux du命令查看文件夹大小并按降序排列