关键字--sizeof

  sizeof的作用是求取数据类型或变量在内存中占用字节数的多少。一般的用法例如sizeof(int),很像函数用法,但是sizeof并不是一个函数,而是关键字。sizeof的结果在编译时就确定。

  从代码来分析sizeof在不同情况下获得的结果:

    sizeof(int); //32位机子下结果是4 

 

    int a[10];

    sizeof(a);//数组变量a占用的内存字节数,结果是 10*sizeof(int)=40

    sizeof(&a); //&a是一个指针,结果为指针变量占用的字节数4

  

  还有一种情况:

    void fun(int a[10])

    {

      sizeof(a);

    }

  此处sizeof(a)的结果是多少呢?

  结果是4.

  先来分析一下:

    一般来说函数传递参数过程中,传递到函数内的数值实际上都是实参的一个拷贝,所以在函数内修改传递过来的参数数值不会影响实参本身。但是当数组作为函数参数时,考虑到为数组建立拷贝可能需要消耗大量的时间和内存空间,非常不划算。所以数组作为函数参数一律会被编译器解析为数组指针。上面的代码在编译器看到的实际上就是这样子,

    void fun(int *a)

    {

      sizeof(a); //等效为sizeof(int *),所有指针类型变量占用的内存为4个字节

    }

   因为编译器的这个特性,编译器不会关心数组作为函数参数时的长度,‘void fun(int a[10])’中的10可以不写,或者写其他数字也没有影响。

 

 

 

 

posted @ 2013-05-10 18:34  反光镜的博客  阅读(154)  评论(0编辑  收藏  举报