遇君阁

前不见古人,后不见来者
念天地之悠悠,独怆然而涕下

  VC知识库BLOG :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 登录 ::
  26 随笔 :: 8 文章 :: 53 评论 :: 0 Trackbacks
<2008年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

留言簿(0)

随笔分类

随笔档案

文章分类

文章档案

相册

相关链接

搜索

最新评论

阅读排行榜

评论排行榜

  
首先需要说明的是sizeof是一个操作符,它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小,这是sizeof的核心所在,即操作数在内存占多大,sizeof就返回多少。但往往很多人都只是知道sizeof这些概念,而不知道如何使用它、在什么情况下使用它以及不能深刻理解sizeof的含义。所以我参考了一些文档,总结了一下,希望对大家有帮助:

一、sizeof的使用方法
  1、用于数据类型

  sizeof使用形式:sizeof(type)

  数据类型必须用括号括住。如sizeof(int)。

  2、用于变量

  sizeof使用形式:sizeof(var_name)或 sizeof var_name

  变量名可以不用括号括住。如sizeof (var_name),sizeof var_name等都是正确形式,但建议用带括号的用法。

  sizeof操作符不能用于函数类型,不完全类型或位字段。在这里不完全类型指具有未知存储大小的数据类型,如void类型等。

    例:sizeof(printf); //错误,不能用于函数类型,printf是函数名称
             sizeof(void); //错误

    注意以下几种情况:
    (1)操作数为结构或类。(这里涉及到内存对齐方式的问题,网上的文档很多,可以参考:http://blog.csdn.net/topcool99/archive/2004/10/12/134092.aspx
             第一、结构或者类中的静态成员不对结构或者类的大小产生影响,因为静态变量的存储位置与结构或者类的实例地址无关。
             第二、没有成员变量的结构或类的大小为1,因为必须保证结构或类的每一个实例在内存中都有唯一的地址。

    (2)void func(int a[10])
             {
                 cout<<sizeof(a); //这里输出4,由于它是一个指针,关于此问题可以参考《C专家编程》中数组与指针章节
             }

二、sizeof的使用场景
  1、分配存储空间
         这里最难的是分配多维数组存储空间,所以这里举了几个例子:
        方法一: int rows = 10;
                         int columns = 10;
                         int **array1 =(int **)  malloc(10* sizeof(*array1));
                         for(int i = 0; i < rows; i++)
                         array1[i] =(int *) malloc(columns * sizeof(**array1));
                         此方法比较常用
        方法二:int rows = 10;
                        int columns = 10;
                        int **array2 =(int **) malloc(rows * sizeof(int *));
                        array2[0] =(int *) malloc(rows * columns * sizeof(int));
                        for(int i = 1; i < rows; i++)
                        array2[i] = array2[0] + i * columns;
                        此方法的优点是存储空间连续


  2、sizeof的另一个的主要用途是计算数组中元素的个数。例如:

             int a[10];
             cout<<sizeof(a)/sizeof(int); //输出10

总结:sizeof操作符的操作数是什么类型,它就会返回该类型在存储空间中的大小,只是在使用上注意上面提到的几条就可以了。

posted on 2007-01-19 12:10 游游的家 阅读(1634) 评论(0)  编辑 收藏

评论

标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]