一、Sizeof的说明
sizeof是C/C++语言的一种单目操作符,它不是函数。sizeof操作符返回值为其操作数的存储大小,用字节数表示。操作数可以是一个表达式或括在括号内的类型名。 sizeof的结果是size_t,它被定义为unsigned int类型。该类型保证容纳显示所建立的最大对象的字节大小。
需牢记sizeof的计算发生在编译时刻,所以它可以被当作常量表达式使用,且会忽略其括号内的各种运算。
二、Sizeof的使用
1、sizeof的使用形式:sizeof(var_name)或者sizeof var_name
2、数据类型必须用括号括起来:sizeof(type)
变量、对象可以不用括号括住:sizeof a,但若是类型必须用括号。
3、sizeof可以对表达式求值:sizeof(2.5+3.14),实际是sizeof(double)
4、sizeof可以对函数调用求值,实际上是对返回值类型求值
int func(char s[5]);
{
cout<<endl;
return 1;
}
sizeof(func(“1234”))=4 //因为func的返回类型为int,所以相当于求sizeof(int)=4,sizeof(s)=4
5、以下情况不能用sizeof进行求值
1)不能对函数名求值
2)不能对不确定返回值的类型求值,如void
3)位域成员不可以使用sizeof求值
4)不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。
一般,在32位编译器下:
sizeof(char):1
sizeof(short):2
sizeof(int):4
sizeof(long):4
sizeof(float):4
sizeof(double):8
sizeof(long long):8
sizeof(p):4,(p为指针)
32位系统下指针的sizeof是4字节,64位下是8字节
1) 指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。
注意: int *p; sizeof(p)=4;(32位系统下始终不变)sizeof(*p)相当于sizeof(int),随着数据类型的改变而改变;
2) 对于静态数组,sizeof可直接计算数组大小;当数组动态分配时,int *a = new int[10]; sizeof = 4。
例: int a[10];char b[]="hello";
sizeof(a)等于4*10=40;
sizeof(b)等于6;
注意: 数组做形参时,数组名称当作指针使用!!
void fun(char p[]) {sizeof(p)等于4}
如下程序:
#include <stdio.h>
void func(char p[])
{
printf("in func args,p[] size %d\n", sizeof(p));
}
int main()
{
int *p;
int a[10];
char b[] = "hello";
printf("*p size %d\n", sizeof(p));
printf("a[10] size %d\n", sizeof(a));
printf("\"hello\" size %d\n", sizeof(b));
func(b);
return 0;
}
输出结果:
*p size 4
a[10] size 40
"hello" size 6
in func args,p[] size 4