Chinaunix首页 | 论坛 | 博客
  • 博客访问: 95960
  • 博文数量: 41
  • 博客积分: 991
  • 博客等级: 准尉
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-11 19:59
文章分类

全部博文(41)

文章存档

2012年(18)

2011年(23)

分类: C/C++

2011-08-04 21:48:35

由于存储变量时地址对齐的要求,编译器在编译程序时会遵循两条原则:一、结构体变量中成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍) 二、结构体大小必须是所有成员大小的整数倍。

struct stc1 {       // sizeof( struct stc1) =12
  char c1;
  int i;
 char c2;
};  

struct stc2 {   //  sizeof(struct stc2) =8
  char c1;
  char c2;
 int i;
};



 用法sizeof 是操作符(非函数),它以字节形式给出其操作数的存储大小。
sizeof 操作结果类型是unsigned int。
对于不能确定存储大小的操作数,不能用sizeof。
对于变量可以 sizeof var_p,而数据类型必须用括号。
 
指针所占的存储空间是 4个字节,sizeof(ptr)=4。
对于数组,sizeof(array)为数组总字节数。
对于结构,则其大小为:成员个数 * 最大字节成员的字节数。
 
  1. // 指针
  2. int *ptr1; // sizeof(ptr1) 4
  3. int **ptr2; // sizeof(ptr2) 4
  4. double *ptr3; // sizeof(ptr3) 4
  5. long *ptr4; // sizeof(ptr4) 4

  6. // 基本数据类型
  7. int a; // sizeof(a) 或者 sizeof(a) 4
  8. double d; // 8
  9. long l; // 4

  10. // 数组
  11. int ar_a[2]; // sizeof ar_a 8
  12. int ar_b[3]={1,2}; // 12
  13. int ar_c[]={1,2}; // 4

  14. char ar_char[]={1}; // 1

  15. int cw[]; // sizeof(cw) 编译出错

  16. // 结构

  17. struct Sct {
  18.  int d
  19.  char a;
  20.   double d;
  21. };

  22. // sizeof (struct Sct) 8*3=24
  23. struct S {
  24.  int a;
  25.  char c;
  26. } u;

  27. struct S q;
  28. // sizeof u 4*2=8
  29. // sizeof q 4*2=8
  30. // sizeof(struct S) 4*2=8
 
 
阅读(1274) | 评论(0) | 转发(0) |
0

上一篇:sk_buff

下一篇:fedora15 无线联网

给主人留下些什么吧!~~