C语言中的sizeof操作符
注:本博客中的结果均是指运行在codeBlock16.01+window10上,sizeof显示的结果均是以字节为单位的。
- 对数据类型使用sizeof
sizeof(long long) -> 8
sizeof(int) -> 4
sizeof(char) -> 1
sizeof(string) -> 4
sizeof(float) -> 4
sizeof(double) -> 8 - 对数据类型指针使用sizeof
sizeof(char *) -> 4
sizeof(int *) -> 4
sizeof(long long *) -> 4
sizeof(float *) -> 4
sizeof(double *) -> 4
sizeof(string *) -> 4 - 对数组使用sizeof
int arr_a[10] ,sizeof(arr_a) -> 40
char arr_b[10],sizeof(arr_b) -> 10
… 对类class使用sizeof
class A1
{
A();
~A(); //有无构造函数或者是其他复杂的构造函数结果都是 1 !
static int x; //可以是int、long long、double、char…,注释掉这一行结果也是一样的。就是说static并没有增加类的存储空间
};
class A2
{
A();
~A();
int x;
};
class A3
{
A();
~A();
double x;
};
class A4
{
A();
~A();
int x; //或者是char、double、string、long long(好像是有什么字节对齐的约束)
double y;
};
sizeof(class A1) -> 1;sizeof(A2) -> 4;sizeof(A3) -> 8;sizeof(A4) -> 16以上仅仅是简单的对class使用sizeof的结果,有关虚类、虚继承的参考链接(在此对博主的好心分享表示感谢):http://blog.sina.com.cn/s/blog_728161840100u2ib.html
http://blog.csdn.net/hairetz/article/details/4171769关于字节对齐的内容参考(在此对博主一并表示感谢):http://blog.csdn.net/hairetz/article/details/4084088
- 对函数使用sizeof—取决于函数的返回类型
void fun0(int x,int y)
{
int z = x+y;
}
char fun1(int x,int y)
{
return x+y;
}
int fun2(int x,int y)
{
return x+y;
}
double fun3(int x,int y)
{
return x+y;
}
long long fun4(int x,int y)
{
return x+y;
}
string fun5(int x,int y)
{
return “1+2”;
}
sizeof(fun0(1,2)) -> 1, sizeof(fun1(1,2)) -> 1 , sizeof(fun2(1,2)) -> 4 , sizeof(fun3(1,2)) -> 8 , sizeof(fun4(1,2)) -> 8 , sizeof(fun5(1,2)) -> 4.