参考:sizeof_百度百科

sizeof()用法汇总(经典)

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

1、sizeof概念

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

2、与strlen()比较

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

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。

sizeof()用法的更多相关文章

  1. 别人不会给你说的---C语言中数组名和指针的区别 及 sizeof用法

    引自: http://blog.csdn.net/tianyue168/article/details/5781924 #i nclude <iostream.h> int  main( ...

  2. sizeof用法

    c语言详解sizeof   原文地址:http://blog.sina.com.cn/s/blog_5da08c340100bmwu.html 一.sizeof的概念   sizeof是C语言的一种单 ...

  3. sizeof()用法汇总

    sizeof()功能:计算数据空间的字节数 1.与strlen()比较      strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素.      ...

  4. sizeof()用法汇总【转载】

    转载自:http://www.cnblogs.com/chengxin1982/archive/2009/01/13/1374575.html 参考:http://blog.csdn.net/free ...

  5. sizeof用法研究

    一.基础研究 写一个c程序,打印int.long.double型变量所占的字节数.地址.各个字节的地址和内容.打印地址和内容比较好办,打印地址可以用取址符&,打印内容直接输出就行了,那么怎么打 ...

  6. 如何比较一个类型【模板使用】【sizeof用法】

    #include <iostream> using namespace std; void testEmptyClass(); struct Empty { }; struct Dummy ...

  7. sizeof()用法汇总 zhuan

    sizeof()功能:计算数据空间的字节数1.与strlen()比较      strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素.       ...

  8. 数组名作为函数参数以及sizeof用法

    来源:https://blog.csdn.net/jay_zhouxl/article/details/51745518 int f(int *p,char *a) { printf("p[ ...

  9. 编程基础-c语言中指针、sizeof用法总结

    1.指针 学习 C 语言的指针既简单又有趣.通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的.所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的. ...

随机推荐

  1. Java工作队列和线程池

    背景    最近的需要做一个与设备通信的web项目.当然,我们需要写好与设备之间的通信协议(socket).大致的时序逻辑时:当用户用浏览器点击页面某一控件后,它就向后台发送一个post请求,后台解析 ...

  2. jetty服务器

    1,http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin 2,http://wiki.eclipse.org/Jetty#Getting_S ...

  3. PowerMock注解PowerMockIgnore的使用方法

    故事要从一个异常开始,某天我在开发一个加密.解密特性,算法使用的是3DES,样例代码如下. package org.jackie.study.powermock; import java.io.Uns ...

  4. [Redux] Fetching Data on Route Change

    We will learn how to fire up an async request when the route changes. A mock server data: /** /api/i ...

  5. getline和get的区别

    #include<iostream> #include<fstream> #include<cstring> using namespace std; int ma ...

  6. Myapplication的作用与理解

    1.前沿在设置里面,对应于某一个应用,虽然没有启动,但是上面有一个终止按钮,说明这个应用时启动的,只是里面没有Activity,所以说使用android退出把一个应用退出,实际上他所对应的Applic ...

  7. SVN/GIT源代码泄露

    造成SVN源代码漏洞的主要原因是管理员操作不规范.在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息.但一些网站管理员在发布代码时,不愿意使用‘导出’功能 ...

  8. POJ 1845 Sumdiv(因子分解+快速幂+二分求和)

    题意:给你A,B,让求A^B所有的因子和模上9901 思路:A可以拆成素因子的乘积: A = p1^x1 * p2^x2 *...* pn^xn 那么A^B = p1^(B*x1) * p2^(B*x ...

  9. CSS排版页面

    创建CSS文件如下: @charset "utf-8"; /* CSS Document */ *{ margin:0px; padding:0px; border:0px; } ...

  10. Bootstrap-全局css样式之按钮

    这里所说的按钮只是Bootstrap设计的能使标签或元素呈现按钮样式的属性,所以为 <a>.<button> 或 <input> 元素添加按钮类(button cl ...