一:在Windows下测试
//测试环境为Windows7 32bit,IDE为VS2010
测试源码:
#include
using namespace std;
//基础类型及共用体测试
union unionOne{//长度为1,无疑问
char c;
};
union unionTwo{//长度=4,说明了共用体的长度是所有元素长度中长度最长那个变量的,无疑问
char c;//sizeof(char)=1
int number;//sizeof(int)=4
};
union unionThree{//长度为8,即double的长度,无疑问
char c;
int i;
double d;
};
//结构体
struct structZero//长度为1,无疑问
{
char c;
};
int main()
{
//基本类型测试
cout<<”sizeof(int)=”<<sizeof(int)<<endl;//4
cout<<”sizeof(float)=”<<sizeof(float)<<endl;//4
cout<<”sizeof(double)=”<<sizeof(double)<<endl;//8
cout<<”sizeof(short)=”<<sizeof(short)<<endl;//2
cout<<”sizeof(char)=”<<sizeof(char)<<endl;//1
cout<<”sizeof(bool)=”<<sizeof(bool)<<endl;//1
cout<<”sizeof(true)=”<<sizeof(true)<<endl<<endl;//1
//可以看出,这里的指针的长度都是4
cout<<”sizeof(int*)=”<<sizeof(int*)<<endl;//4
cout<<”sizeof(char*)=”<<sizeof(char*)<<endl;//4
cout<<”sizeof(double*)=”<<sizeof(double*)<<endl;//4
cout<<”sizeof(double**)=”<<sizeof(double**)<<endl<<endl;//4
//可以看出,union的长度即里面长度最大的成员的长度
cout<<”sizeof(unionOne)=”<<sizeof(unionOne)<<endl;//1
cout<<”sizeof(unionTwo)=”<<sizeof(unionTwo)<<endl;//4
cout<<”sizeof(unionThree)=”<<sizeof(unionThree)<<endl<<endl;//8
cin.get();
}
测试结果: 二:在fedora20/linux 64bit下测试 gcc version=4.8.2
可以看出,在Windows 32bit里面,指针是用4个字节来表示的,也就是4*8=32bit; 在linux 64bit里面,指针用8个字节表示,8*8=64,可以看出这里面的规律了吧。那么在16bit里面,是不是用16/8=2来表示的呢? 这个留给你们自己去测试吧。 —————————————————————————————————————————————————— //写的错误或者不好的地方请多多指导,可以在下面留言或者给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。 转载请注明出处:https://www.royalchen.com/ author:royalchen Email:royalchen@royalchen.com ———————————————————————————————————————————————————
- 本文作者: royalchen
- 本文链接: http://www.royalchen.com/2016/02/24/c学习笔记2各基础类型及共用体的长度测试/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!