设为首页 加入收藏

TOP

C++面试常见sizeof问题总结(一)
2014-03-10 12:50:57 来源: 作者: 【 】 浏览:175
Tags:面试 常见 sizeof 问题 总结

  本文参考http://www.cppblog.com/w57w57w57/archive/2011/08/09/152845.html又根据自己常被问及的问题和常犯的一些错误对其进行了一些补充。

  sizeof的使用非常简单:求对象或者类型的大小。然后sizeof又非常复杂,它涉及到很多特殊情况。

  (1) sizeof是操作符,不是函数。

  MSDN:The sizeof keyword gives the amount of storage, in bytes, associate with a variable or a type(including aggregate types). This keyword returns a value of type size_t(typedef unsigned int size_t).

  语法:sizeof(object);=> sizeof(1); sizeof(typename);=>sizeof(int); sizeof object;=>sizeof 1;(注意sizeof typename是错误的)

  (2) sizeof不能求得void类型的长度。

  你不能用sizeof(void);这样将产生:error C2070: illegal sizeof operand

  比如如下代码:

  void fun(){

  }

  int main(){

  cout<

  return 0;

  }//这个编译是不会通过的

  char fun(){

  return ‘a’;

  }

  int main()

  {

  cout<

  return 0;

  }//引申一下,这个是测量返回值的长度,因此是1,而不是指针的长度4.结合第八点来看。

  (3) sizeof能求得void类型的指针的长度。

  目前基本上所有的编译器都把指针的大小看做是4byte。其实指针也是变量,只不过这个变量很特殊,它是存放其他变量的地址的变量。又由于目前32位计算机平台上的程序段的寻址范围是4GB,寻址的最小单元是Byte,4GB等于232byte。这么多得内存起地址如何编码,只需要用32个bit就行了,而32bit=32、8=4Byte,也就是说只要4Byte就能存储这些内存的地址了。因此对任何类型的指针变量进行sizeof运算其结果就是4.(一个疑问,指针类型用4Byte存储了指针指向的地址,如何区分是何种类型的指针呢? )

  (4) sizeof能求得静态分配的内存的数组的长度。

  int a ;sizeof(a); 这样可求得长度是10*4=40.(引申问题:数组名和指针的区别。参看下篇 ),另外注意char ch[]=”abc”; sizeof(ch);结果为4,注意字符串数组末尾有’\0’,通常我们可以利用sizeof来计算数组中包含的元素个数。其做法是:int n=sizeof(a)/sizeof(a[0]);

  要注意对函数的形参数组使用sizeof的情况。如:

  void fun(int arr ){

  int n = sizeof(arr);

  }//n的值为4

  这里的原因是在函数参数传递时,数组被转化成指针了。加入直接传递整个数组的话,那么必然涉及到数组元素的拷贝(实参到形参的拷贝),当数组非常大时,这会导致执行效率极低!而只传递数组的地址(即指针)那么只需要拷贝4Byte。

   

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++ inline(内联什么时候使.. 下一篇typedef 及其与struct的结合..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·HTTPS 详解一:附带 (2025-12-26 02:20:37)
·TCP/IP协议到底在讲 (2025-12-26 02:20:34)
·TCP和UDP在socket编 (2025-12-26 02:20:32)
·有没有适合新手练习 (2025-12-26 01:48:47)
·用清华镜像网怎么下 (2025-12-26 01:48:44)