sizeof用法

103 阅读1分钟

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:(最麻烦的部分)

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

blog.csdn.net/EVEcho/arti… 

 

总结:

    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 *)