分享

C语言中的sizeof用法

 薛董_艾瑞 2018-03-15

C语言中的sizeof是一个很有意思的关键字,经常有人用不对,搞不清不是什么。我以前也有用错的时候,现在写一写,也算是提醒一下自己吧。反正现在来看,还在搞sizeof是什么意思,怎么用正确,还是有点搞笑,都经常用的东西,没有理解透彻,就差的太远了。

第一  sizeof是什么

  sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等,sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。这个操作数不好理解对吧?后面慢慢看就明白了。sizeof的返回值是size_t,在64位机器下,被定义为long unsigned int。

第二 sizeof如何使用

1、用于数据类型

  使用形式: sizeof(type)。其中type如int 、double等。 例如sizeof(int)、sizeof(char*)、sizeof(double)。这个时候sizeof后面的类型必须用括号()包起来,不包起来是错误的,通过不了编译。其中sizeof(void*)在64位下是8,而sizeof(void)是1。其实,在C语言中sizeof(函数),如sizeof(main),结果也是1。但是在C++中,sizeof(void)和sizeof(函数)都是非法的,通过不了编译,后面C++就不说了,现在讲C嘛。其实sizeof(函数),sizeof(void)虽然是1,但是是不正确的使用方式。

2、用于变量

  使用形式: sizeof(var)或sizeof var。当操作基本数据类型的时候,在我64位电脑的结果如下

  1. sizeof(char) 1  
  2. sizeof(char) 1  
  3. sizeof(short) 2  
  4. sizeof(int) 4  
  5. sizeof(long) 8  
  6. sizeof(float) 4  
  7. sizeof(double) 8  
  8. sizeof(long double) 16  
  9. sizeof(int*) 8  
  10. sizeof('a') 4  
  11. sizeof(1) 4  
  12. sizeof(1.0f) 4  
  13. sizeof(1.0) 8  
  14. sizeof "abc" 4  
其中sizeof('a') 4有点奇怪哈。

当操作数是联合类型时,sizeof是其最大字节成员的字节数。当操作数是结构类型时,sizeof是其成员类型的总字节数,包括补充字节在内。如下:

  1. union  U  
  2. {  
  3.      char c;  
  4.      double d;  
  5. }U;  
  6.   
  7. sizeof(U) = max(sizeof(c),sizeof(d)) = sizeof(1,8) = 8;  

而sizeof结构体的时候,还要考虑对齐的问题:

  1. struct S  
  2. {  
  3.      char c;  
  4.      double d;  
  5. }s;  
在我的电脑上,sizeof(s)的大小是16。


基本上说的比较清楚了,但有些时候和函数参数相关的时候,还是要注意,比如

  1. int calc(char a[10])  
  2. {  
  3.     printf("%d\n",sizeof(a));  
  4.     return 0;  
  5. }  
  6.   
  7. int main()  
  8. {  
  9.     char a[10]={"hello"};  
  10.     calc(a);  
  11.     return 0;  
  12. }  
打印的结果是8,而不是10,这个是要注意的。









 


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多