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

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\n";
	char *str1=(char*)malloc(100);
	cout<<"sizeof(char)="<<sizeof(char)<<"\n";//1
	cout<<"sizeof(short)="<<sizeof(short)<<"\n";//2
	cout<<"sizeof(int)="<<sizeof(int)<<"\n";//4
	cout<<"sizeof(long)="<<sizeof(long)<<"\n";//4
	cout<<"sizeof(float)="<<sizeof(float)<<"\n";//4
	cout<<"sizeof(double)="<<sizeof(double)<<"\n";//8
	cout<<"sizeof(ss1)="<<sizeof(ss1)<<"\n";//4   指针占用四个字节
	cout<<"sizeof(ss2)="<<sizeof(ss2)<<"\n";//7   未指定大小的数组是数组成员的大小,注意字符串最后有\0占用一个字节
	cout<<"sizeof(ss3)="<<sizeof(ss3)<<"\n";//100 指定大小的数组是数组大小*成员大小
	cout<<"sizeof(ss4)="<<sizeof(ss4)<<"\n";//400 指定大小的数组是数组大小*成员大小
	cout<<"sizeof(ss5)="<<sizeof(ss5)<<"\n";//24  多维数组是位数乘积乘以数组元素大小
	cout<<"sizeof(q2)="<<sizeof(q2)<<"\n";//3    注意\n占一个字节
	cout<<"sizeof(str1)="<<sizeof(str1)<<"\n";//4  指针
	cout<<"sizeof(A)="<<sizeof(A)<<"\n";//12    
	cout<<"sizeof(B)="<<sizeof(B)<<"\n";//8
	cout<<"sizeof(A1)="<<sizeof(A1)<<"\n";//4
	cout<<"sizeof(A2)="<<sizeof(A2)<<"\n";//8
	cout<<"sizeof(A3)="<<sizeof(A3)<<"\n";//8
	cout<<"sizeof(A4)="<<sizeof(A4)<<"\n";//12
	cout<<"sizeof(A5)="<<sizeof(A5)<<"\n";//24
	cout<<"sizeof(A6)="<<sizeof(A6)<<"\n";//20
	cout<<"sizeof(A7)="<<sizeof(A7)<<"\n";//1
	cout<<"sizeof(A8)="<<sizeof(A8)<<"\n";//12
	cout<<"sizeof(A9)="<<sizeof(A9)<<"\n";//40
	cout<<"sizeof(A10)="<<sizeof(A10)<<"\n";//4
	cout<<"sizeof(f())="<<sizeof(f())<<"\n";//4

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




  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值