zoukankan      html  css  js  c++  java
  • sizeof()用法

    参考:sizeof_百度百科

            sizeof()用法汇总(经典)

    声明:本文是笔者抽出对自己有用的细节,对前两文的总结。

    1、sizeof概念

        sizeof是C语言中判断数据类型或者表达式长度符;不是一个函数,它的计算在程序编译时进行,而不是在程序执行的过程中才计算出来。所有sizeof()在编程过程中可以看做是一个常数来处理。

    2、与strlen()比较

         strlen()计算字符数组的字符数,以""为结束判断,不计算为''的数组元素

         sizeof计算数据(变量、类型、结构体等)所占内存空间,用字节数表示

    char s[] = "hello";

    运行结果

    cout<<sizeof(s)<<endl;  //6
    cout<<strlen(s)<<endl;  //5

    3、格式

    sizeof有三种语法形式,如下:
    1) sizeof( object ); // sizeof( 对象 );
    2) sizeof( type_name ); // type_name( 类型 );
    3) sizeof object; // sizeof 对象;

    4、返回值

    其返回值类型为size_t,在头文件“stddef.h”中定义。这是一个依赖于编译系统的值,一般定义为
    typedef unsigned int size_t;

    5、经典问题 

          double* (*a)[3][6]; 
          cout<<sizeof(a)<<endl;       // 4 “a为指针”
          cout<<sizeof(*a)<<endl;      // 72 “*a为一个有3*6个指针元素的数组”
          cout<<sizeof(**a)<<endl;     // 24 “**a为数组一维的6个指针”
          cout<<sizeof(***a)<<endl;    // 4 “***a为一维的第一个指针”
          cout<<sizeof(****a)<<endl;   // 8 “****a为一个double变量”

    问题解析:

        a是一个很奇怪的定义,他表示一个指向double*[3][6]类型数组的指针。既然是指针,所以sizeof(a)就是4。既然a是执行double*[3][6]类型的指针,*a就表示一个double*[3][6]的多维数组类型,因此sizeof(*a)=3*6*4=72。同样的,**a表示一个double*[6]类型的数组,所以sizeof(**a)=6*4=24。***a就表示其中的一个元素,也就是double*了,所以sizeof(***a)=4。至于****a,就是一个double了,所以sizeof(****a)=sizeof(double)=8。

  • 相关阅读:
    面试技巧
    [CODEVS1116]四色问题
    [CODEVS1216]跳马问题
    [CODEVS1295]N皇后(位运算+搜索)
    [CODEVS1037]取数游戏
    [CODEVS1048]石子归并
    [NOIP2012]同余方程
    C++深入理解虚函数
    Attention Model
    faster-rcnn系列原理介绍及概念讲解
  • 原文地址:https://www.cnblogs.com/amanlikethis/p/3442899.html
Copyright © 2011-2022 走看看