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。

原文地址:https://www.cnblogs.com/amanlikethis/p/3442899.html