码迷,mamicode.com
首页 > 其他好文 > 详细

sizeof函数总结

时间:2014-08-27 18:18:18      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:style   使用   ar   数据   问题   sp   on   new   size   

sizeof函数功能:计算数据空间的字节数

1.strlen()比较

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

sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示(当然用在字符数组计算"\0"的大小)。

2.指针与静态数组的sizeof操作

指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4

实例1::char *p;

sizeof(p)=4;

sizeof(*p) = 1;   //相当于sizeof(char);  

实例2  

对于静态数组,sizeof可直接计算数组大小;

例:int a[10];

char b[]="hello";

sizeof(a)等于4*10=40;

sizeof(b)等于6;

void  fun(char p[])

{

 sizeof(p);         //等于4,数组做型参时,数组名称当作指针使用!!

}

实例3(经典考题):

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变量

问题解析:

首先来看

int (*p)[4]; //定义一个指针,指向由四个整形元素组成的对象

int a[3][4];//定义一个二维数组,其中ap都是相同的指针类型

 

a是一个很奇怪的定义,他表示一个指向double*[3][6]类型数组的指针。既然是指针,所以sizeof(a)就是4

既然a是执行double*[3][6]类型的指针,*a就表示一个double*[3][6]的多维数组类型,因此sizeof(*a)=3*6*sizeof(double*)=72

同样的,**a表示一个double*[6]类型的数组,sizeof(**a)=6*sizeof  (double*)=24

***a就表示其中的一个元素,也就是double*了,所以sizeof(***a)=4

****a,就是一个double了,所以sizeof(****a)=sizeof(double)=8

sizeof函数总结

标签:style   使用   ar   数据   问题   sp   on   new   size   

原文地址:http://www.cnblogs.com/notlate/p/3939723.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!