sizeof用法

 sizeof用法

定义:sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。

语法:sizeof有两种语法:


  
  1. sizeof(type_name); //sizeof(类型);
  2. sizeof object; //sizeof对象;

例子:


  
  1. int i;
  2. sizeof(i); //ok
  3. sizeof i; //ok
  4. sizeof( int); //ok
  5. sizeof int; //error

 

下面我们来看一些实际编程中常见类型的sizeof:(均在32位系统下测试)

基本数据类型的sizeof:


  
  1. int main()
  2. {
  3. int i= 1;
  4. int i1[ 2]={ 0, 1}; //two elems
  5. char c= 'c';
  6. char c1[ 6] = "abcdd"; //five elems
  7. float f= 5.2;
  8. double d= 5.2;
  9. cout<< "int i: "<< sizeof(i)<< endl;
  10. cout<< "int i1[2]: "<< sizeof(i1)<< endl;
  11. cout<< "char c: "<< sizeof(c)<< endl;
  12. cout<< "char c1[6]: "<< sizeof(c1)<< endl;
  13. cout<< "float f: "<< sizeof(f)<< endl;
  14. cout<< "double d: "<< sizeof(d)<< endl;
  15. return 0;
  16. }

结果如下:

这些基本的类型,sizeof的结果都为该类型所占的空间的大小,但是当为数组的时候,sizeof的值=数组元素类型 x 元素个数;例如 int i1[2]={0,1},则sizeof为:4x2=8;

 

指针变量的sizeof:


  
  1. int main()
  2. {
  3. char*pc= "abc";
  4. int*pi;
  5. string*ps;
  6. char**ppc=&pc;
  7. void(*pf)(); //函数指针
  8. cout<< "char*pc: "<< sizeof(pc)<< endl;
  9. cout<< "int*pi: "<< sizeof(pi)<< endl;
  10. cout<< "string*ps: "<< sizeof(ps)<< endl;
  11. cout<< "char**ppc: "<< sizeof(ppc)<< endl;
  12. cout<< "void(*pf): "<< sizeof(pf)<< endl;
  13. return 0;
  14. }

在32位计算机中,一个指针变量的返回值通常是4(注意结果是以字节为单位),在64位系统中指针变量的sizeof通常为8

由此也可知,指针变量的sizeof值与指针所指的对象没有任何关系,都为4。

其实指针的本质就是整形,指针又叫无符号的整形,所以,可以说指针的sizeof都为4.

 

结构体的sizeof:(最麻烦的部分)

由于比较麻烦,我也讲不怎么清楚,还是建议去下面这个博客看看能不能理解

https://blog.csdn.net/EVEcho/article/details/81115683 

 

总结:

    sizeof(数组): 分配的数组空间大小;
    sizeof(指针): 该指针所用的空间大小(在32位系统是4,在64系统是8);
    sizeof(类型): 该类型所占的空间大小;
    sizeof(对象): 对象的实际占用空间大小;
    sizeof(函数): 函数的返回类型所占的空间大小。函数的返回类型不能是void

 

附:

sizeof和strlen的区别:

  1. sizeof求的是占用内存的大小,strlen求的是字符串的实际长度;(sizeof统计'\0',strlen不统计'\0')
  2. sizeof是算符,strlen是函数;
  3. sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的;(sizeof还可以用函数做参数)
  4. 数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,
  5. 如:fun(char[8])fun(char[])  都等价于 fun(char *)

 

本文作者:TwcatL_tree

本文链接:https://www.cnblogs.com/twcat/p/16912513.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   TwcatL_tree  阅读(29)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起