sizeof用法
定义:sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
语法:sizeof有两种语法:
sizeof(type_name);
//sizeof(类型);
sizeof object;
//sizeof对象;
例子:
int i;
sizeof(i);
//ok
sizeof i;
//ok
sizeof(
int);
//ok
sizeof
int;
//error
下面我们来看一些实际编程中常见类型的sizeof:(均在32位系统下测试)
基本数据类型的sizeof:
int main()
int i=
1;
int i1[
2]={
0,
1};
//two elems
char c=
'c';
char c1[
6] =
"abcdd";
//five elems
float f=
5.2;
double d=
5.2;
cout<<
"int i: "<<
sizeof(i)<<
endl;
cout<<
"int i1[2]: "<<
sizeof(i1)<<
endl;
cout<<
"char c: "<<
sizeof(c)<<
endl;
cout<<
"char c1[6]: "<<
sizeof(c1)<<
endl;
cout<<
"float f: "<<
sizeof(f)<<
endl;
cout<<
"double d: "<<
sizeof(d)<<
endl;
return
0;
结果如下:
这些基本的类型,sizeof的结果都为该类型所占的空间的大小,但是当为数组的时候,sizeof的值=数组元素类型 x 元素个数;例如 int i1[2]={0,1},则sizeof为:4x2=8;
指针变量的sizeof:
int main()
char*pc=
"abc";
int*pi;
string*ps;
char**ppc=&pc;
void(*pf)();
//函数指针
cout<<
"char*pc: "<<
sizeof(pc)<<
endl;
cout<<
"int*pi: "<<
sizeof(pi)<<
endl;
cout<<
"string*ps: "<<
sizeof(ps)<<
endl;
cout<<
"char**ppc: "<<
sizeof(ppc)<<
endl;
cout<<
"void(*pf): "<<
sizeof(pf)<<
endl;
return
0;
在32位计算机中,一个指针变量的返回值通常是4(注意结果是以字节为单位),在64位系统中指针变量的sizeof通常为8。
由此也可知,指针变量的sizeof值与指针所指的对象没有任何关系,都为4。
其实指针的本质就是整形,指针又叫无符号的整形,所以,可以说指针的sizeof都为4.
结构体的sizeof:(最麻烦的部分)
由于比较麻烦,我也讲不怎么清楚,还是建议去下面这个博客看看能不能理解
总结:
sizeof(数组): 分配的数组空间大小;
sizeof(指针): 该指针所用的空间大小(在32位系统是4,在64系统是8);
sizeof(类型): 该类型所占的空间大小;
sizeof(对象): 对象的实际占用空间大小;
sizeof(函数): 函数的返回类型所占的空间大小。函数的返回类型不能是void
附:
sizeof和strlen的区别:
- sizeof求的是占用内存的大小,strlen求的是字符串的实际长度;(sizeof统计'\0',strlen不统计'\0')
- sizeof是算符,strlen是函数;
- sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的;(sizeof还可以用函数做参数)
- 数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,
- 如:
fun(
char
[8])fun(
char
[])
都等价于 fun(char *)