入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

sizeof()计算数组结构体类大小长度

创建时间:2015-06-27 投稿人: 浏览次数:116

sizeof()是一个操作符,用来计算长度的,下面程序详细解释了数组,字符,结构体,类等的长度计算方法

32位机器 VC下测试

// sizeof.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdlib.h"
#include "iostream.h"
//数据对其原则
/*******结构体计算大小的原则*******************************************************************************
*成员偏移量为(本成员)大小的整数倍,否则补齐
 *注1:若本成员为嵌套结构体,大小为第一个成员大小
 *注2:若成员为数组,大小为数组一个成员的大小,若为空数组(未指定大小也未指定成员),不占用空间
*结构体总大小为结构体中最宽成员(嵌套结构体的话是嵌套成员中的最宽并不是嵌套整体大小)大小的整数倍,否则补齐
**********************************************************************************************************/
struct{
	char a;//偏移量为0,大小为1,0能被1整除,=1
	short b;//偏移量为1,大小为2,1不能被2整除,=1+1+2=4
	int c;//偏移量为4,大小为4,4能被4整除,=4+4=8
	long d;//偏移量为8,大小为4,8能被4整除,=8+4=12
}A;//大小为12,12能被最宽4整除,所以大小为12
struct {
	long a;//偏移量为0,大小为4,0能被4整除,=4
	short b;//偏移量为4,大小为2,4能被2整除,=4+2=6
}B;//大小为6,6不能被最宽4整除,=6+2=8
class A1
{
public:
	int a;
	static int b;//静态变量保存数据全局区,sizeof查找的是栈区,所以不占用栈区大小
};//=4
/*******************************************************
*类和结构体相同的原理
********************************************************/
class A2
{
public:
	int a;
	char c;
};//=8
class A3
{
public:
	float a;
	char c;
};//=8
class A4
{
public:
	float a;
	int b;
	char c;
};//=12
class A5
{
public:
	double d;
	float a;
	int b;
	short s;
	char c;
	char c2;
	
};//20不能被最宽8整除,=24
class A6
{
public:
	float f;//偏移量为0,大小为4,=4
	char p;//偏移量为4,大小为1,=4+1=5
	int adf[3];//偏移量为5,单个数组成员大小为4,5不能被4整除,=5+3+4*3=20
};//=20
class A7
{
  A7();
  ~A7();
};//空类大小为1
class A8
{
	char c1;
	int i;
	short s;
	char c2;
	char a[];//未指定大小的数组且未填充值,不占用内存
};//大小11不能被4整除,=12
class A9
{
	
	int i;//偏移量为0,大小为4,0能被4整除,=4
	A5 a5;//偏移量为4,嵌套结构体第一个成员大小为8,4不能被8整除,=4+4+24=32
	char c2;//偏移量为32,大小为1,=32+1=33
};//大小为33,33不能被最宽(包括嵌套中的最宽)8整除,=40
class A10
{
	public:
	virtual int fo0()
	{
	}
	virtual void fo1()
	{
	}
};//只要有虚函数就相当于存在一个指针,大小为4
int f()
{
	return 0;
}//int 的大小
int main(int argc, char* argv[])
{
	char *ss1="012345";
	char ss2[]="012345";
	char ss3[100]="012345";
	int ss4[100];
	int ss5[2][3];
	char q2[]="a
";
	char *str1=(char*)malloc(100);
	cout<<"sizeof(char)="<<sizeof(char)<<"
";//1
	cout<<"sizeof(short)="<<sizeof(short)<<"
";//2
	cout<<"sizeof(int)="<<sizeof(int)<<"
";//4
	cout<<"sizeof(long)="<<sizeof(long)<<"
";//4
	cout<<"sizeof(float)="<<sizeof(float)<<"
";//4
	cout<<"sizeof(double)="<<sizeof(double)<<"
";//8
	cout<<"sizeof(ss1)="<<sizeof(ss1)<<"
";//4   指针占用四个字节
	cout<<"sizeof(ss2)="<<sizeof(ss2)<<"
";//7   未指定大小的数组是数组成员的大小,注意字符串最后有占用一个字节
	cout<<"sizeof(ss3)="<<sizeof(ss3)<<"
";//100 指定大小的数组是数组大小*成员大小
	cout<<"sizeof(ss4)="<<sizeof(ss4)<<"
";//400 指定大小的数组是数组大小*成员大小
	cout<<"sizeof(ss5)="<<sizeof(ss5)<<"
";//24  多维数组是位数乘积乘以数组元素大小
	cout<<"sizeof(q2)="<<sizeof(q2)<<"
";//3    注意
占一个字节
	cout<<"sizeof(str1)="<<sizeof(str1)<<"
";//4  指针
	cout<<"sizeof(A)="<<sizeof(A)<<"
";//12    
	cout<<"sizeof(B)="<<sizeof(B)<<"
";//8
	cout<<"sizeof(A1)="<<sizeof(A1)<<"
";//4
	cout<<"sizeof(A2)="<<sizeof(A2)<<"
";//8
	cout<<"sizeof(A3)="<<sizeof(A3)<<"
";//8
	cout<<"sizeof(A4)="<<sizeof(A4)<<"
";//12
	cout<<"sizeof(A5)="<<sizeof(A5)<<"
";//24
	cout<<"sizeof(A6)="<<sizeof(A6)<<"
";//20
	cout<<"sizeof(A7)="<<sizeof(A7)<<"
";//1
	cout<<"sizeof(A8)="<<sizeof(A8)<<"
";//12
	cout<<"sizeof(A9)="<<sizeof(A9)<<"
";//40
	cout<<"sizeof(A10)="<<sizeof(A10)<<"
";//4
	cout<<"sizeof(f())="<<sizeof(f())<<"
";//4

	printf("Hello World!
");
	return 0;
}




声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。