Chinaunix首页 | 论坛 | 博客
  • 博客访问: 368072
  • 博文数量: 715
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:46
文章分类

全部博文(715)

文章存档

2011年(1)

2008年(714)

我的朋友

分类:

2008-10-13 16:30:20

  
首先需要说明的是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)操作数为结构或类。(这里涉及到内存对齐方式的问题,网上的文档很多,可以参考:)
             第一、结构或者类中的静态成员不对结构或者类的大小产生影响,因为静态变量的存储位置与结构或者类的实例地址无关。
             第二、没有成员变量的结构或类的大小为1,因为必须保证结构或类的每一个实例在内存中都有唯一的地址。

    (2)void func(int a[10])
             {
                 cout<             }

二、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操作符的操作数是什么类型,它就会返回该类型在存储空间中的大小,只是在使用上注意上面提到的几条就可以了。


--------------------next---------------------

阅读(130) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~