sizeof

来源:互联网 发布:office2007fix it 编辑:程序博客网 时间:2024/05/05 07:59

     首先问个问题,sizeof是什么,是函数吗? sizeof 不是函数,而是地地道道的属于c++的关键字。顺便问一句c语言有几个关键字?c++又有几个?以上都是常识。。。。

 

     sizeof有以下三种用法:

     siezeof (type_name);

     sizeof (expression);

     sizeof expression;     //注意这里可以没有括号

 

     最后一种用法也说明了sizeof不是函数,因为函数传递参数是必须要借助括号的。但是要注意,当sizeof后接类型名时,必须要有括号,即sizeof int 是错误的,因为int关键字前只能有unsigned ,long 等,加个sizeof,编译器无法解释。

 

     接着看下面的代码,请问输出多少

     int a=10;
     int *p=&a;

     cout<<sizeof(*p+1)<<endl;     //这里输出int类型占的字节,一般为4
     cout<<a<<endl;                       //那么这里a的值是多少呢?答案是10,也就是说a并没有加1

     实际上sizeof返回值是根据它后面表达式的类型来确定的,并且是在编译时确定的,并不对其后面的表达式进行计算,只确定其类型,然后返回值。这也就解释了为什么以下代码是正确的。

     int a[sizeof (int)];

     int i=10;

     int b[sizeof (i+1)]; 

    sizeof返回值是编译时常量。

 

    再看sizeof与数组的关系,请分析下面各表达式的值为多少:

    int a[100];

    sizeof (a);        //a是数组首元素地址,类型为指针,输出4(这里昨天不小心写错了,呵呵,这里数组名a不会转化为首元素地址,

//应该输出400)

    sizeof (a[100]); //这里虽然下标越界,但是仍然认为a[100]为int 类型,输出4

    sizeof (&a);       //&a为数组地址,也属于指针,输出4

 

    int fun(int a[100])

    {

          sizeof (a);   //这里数组退化为指针,输出4

          return 0;

     }