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:(最麻烦的部分)
由于比较麻烦,我也讲不怎么清楚,还是建议去下面这个博客看看能不能理解
https://blog.youkuaiyun.com/EVEcho/article/details/81115683
总结:
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 *)