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;
}