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)="<




你可能感兴趣的:(C/C++)