sizeof()用法总汇

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

1.与strlen()比较 
      strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为‘\0‘的数组元素。 
      而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。
 
2.指针与静态数组的sizeof操作 
   指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。 
注意:int *p; sizeof(p)=4;  但sizeof(*p)相当于sizeof(int);      
 
对于静态数组,sizeof可直接计算数组大小; 
例:int a[10];char b[]="hello"; 
        sizeof(a)等于4*10=40; 
        sizeof(b)等于6; 
注意:数组做型参时,数组名称当作指针使用!! 
               void  fun(char p[]) 
               {sizeof(p)等于4}

经典问题: 
     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*sizeof(double*)=72。同样的,**a表示一个double*[6]类型的数组,所以sizeof(**a)=6*sizeof  (double*)=24。***a就表示其中的一个元素,也就是double*了,所以sizeof(***a)=4。至于****a,就是一个double了,所以sizeof(****a)=sizeof(double)=8。

3.格式的写法 
   sizeof操作符,对变量或对象可以不加括号,但若是类型,须加括号。
 
4.使用sizeof时string的注意事项 
   string s="hello"; 
   sizeof(s)等于string类的大小,sizeof(s.c_str())得到的是与字符串长度。

5.union 与struct的空间计算 
   总体上遵循两个原则: 
   (1)整体空间是 占用空间最大的成员(的类型)所占字节数的整倍数 
   (2)数据对齐原则----内存按结构成员的先后顺序排列,当排到该成员变量时,其前面已摆放的空间大小必须是该成员类型大小的整倍数,如果不够则补齐,以此向后类推。。。。。 
   注意:数组按照单个变量一个一个的摆放,而不是看成整体。如果成员中有自定义的类、结构体,也要注意数组问题。

相关常数: 
sizeof int:4
sizeof short:2
sizeof long:4
sizeof float:4
sizeof double:8
sizeof char:1
sizeof p:4
sizeof WORD:2
sizeof DWORD:4

更多内容:http://www.cnblogs.com/chengxin1982/archive/2009/01/13/1374575.html

sizeof()用法总汇

时间: 2024-10-12 08:04:04

sizeof()用法总汇的相关文章

sizeof用法总结

1. 定义: sizeof是何方神圣? sizeof乃C/C++中的一个操作符(operator)是也,简单的说其作用就是返回一个对象或者类型所占的内存字节数. MSDN上的解释为: The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of ty

sizeof()用法汇总

sizeof()功能:计算数据空间的字节数 1.与strlen()比较       strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素.       而sizeof计算数据(包括数组.变量.类型.结构体等)所占内存空间,用字节数表示. 2.指针与静态数组的sizeof操作       指针均可看为变量类型的一种.所有指针变量的sizeof 操作结果均为4. 注意:int *p; sizeof(p)=4;                   但size

sizeof用法

sizeof sizeof常用于统计数据类型大小,如:int,double,char,float等等.但是它的统计通过一个实 验,让我有了不可思议的发现,平常我们可以用sizeof(int)来测试,int类型占用内存是不是4个byte. 对于统计字符串,感觉上是没有统计最后的'\0';事实验证确实没有统计如: char zifu[] = {W,e,i,x,i,a,n,g,f,e,i} 利用sizeof(zifu)或sizeof zifu统计第一个字符直到最后一个字符占用的总大小,具体的解释是:

sizeof 用法部分总结

#include<iostream> #include<string.h> using namespace std; struct s1 { char a[8]; }; struct s2 { double d; }; struct s3 { s1 s; char a; }; struct s4 { s2 s; char a; }; struct s5 { int i : 8; int j : 4; int a : 3; double b; }; int main(){ int *

C 字符常量 sizeof用法

sizeof一共有3种形式(以64位编译器为例) 如何查看编译器是多少位? sizeof(void *); sizeof( 变量\常量 ) sizeof(10); // 长度为4 char c = 'a'; sizeof(c); // 长度为1 sizeof ('a') // 长度为4,字符常量在内存中占4个字节,存放的是字符的ASCII码(整型数据). C语言规定所有字符常量都作为整型量来处理. sizeof  变量\常量 sizeof 10; char c = 'a'; sizeof c;

c/c++ struct的大小以及sizeof用法

直入主题,怎么判断内存对齐规则,sizeof的结果怎么来的,请牢记以下3条原则:(在没有#pragma pack宏的情况下) 1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储. 2:结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储.(struct a里存有s

C语言中sizeof的用法

今天同学问我sizeof可不可以计算结构体的大小,我竟然忘了C语言还有sizeof这个函数,我是多久没有写程序了啊!!!惭愧,上研究生后写嵌入式方面的程序就特别少了,看来以后还要经常来练练手才行.现在转载一篇看到的sizeof用法的文章,与大家分享(第一篇技术类的文章竟然是转载的,惭愧). #include "stdio.h" #include "string.h" #include "stdlib.h" int main() { short i

sizeof的用法

Sizeof用法 首先说明一下sizeof是c语言运算符,在编译阶段就执行了,和普通的+.-.*等一样. Sizeof有二种语法形式:1.sizeof(对象)或sizeof对象2.sizeof(类型)(可以是抽象类型也可以是一般类型) 举个例子就明白了,int i.可以用sizeof i或者sizeof(i),求得的是i这个对象所占用空间字节数,显然是4:sizeof(int),求得的是这个object类型的空间大小.比如char是1个字节. Sizeof有几种常出错用法,分别是:1,求数组大小

【好文转载c++】 sizeof 使用的经典总结

为了在人面前畅快的吹牛逼,你必须学会背后努力  -----张小二. 写在转载之前: sizeof到底是多少?本来我没有关注,只是有次室友问了我几个sizeof的问题,我被问住了,他当时问我了sizeof(a);是数组,则是数组的字节大小, 如果  void  fun(int a[],int len) {    cout<<sizeof(a)<<endl;//是多少呢,退化为指针,是32位. }   首先你看看http://blog.163.com/[email protected]