"对几组sizeof信息的分析"一文补充

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

实例1:

C++ Reference对sizeof运算符的描述信息如下:

The sizeof operator is a compile-time operator that returns the size, in bytes, of the argument passed to it.

也就是说sizeof的输出信息是在编译期间确定的,同时,没有限定编译器对传递给sizeof的表达式具体作何种处理,而实际上,编译器一般的处理方式是只取传入表达式的类型信息进行输出,下面的例子可以说明这一点。

//sizeofdemo1.c

#include <stdio.h>

int func(int* pi)

{

printf("in func\n");

*pi++;

return 0;

}

int main()

{

int i = 0;

printf("sizeof(func(&i)) = %d\n", sizeof(func(&i))); //这里完全与sizeof(int)等价

printf("Current value of i is: %d\n", i);

printf("sizeof(i++) = %d\n", sizeof(i++)); //这里也是

printf("Current value of i is: %d\n", i);

printf("sizeof(1.0) = %d\n", sizeof(1.0));

return 0;

}

因此,我们不要试图在sizeof中对变量进行修改(在VC中进行程序开发的时候也需要注意,不要试图在ASSERT等宏中进行变量的修改操作,否则,在Release方式下编译的时候,将完全忽略你的程序代码,引起十分难于发现的错误)。

实例2:

使用位域(bit-field)的情况(C++ Primer说:有一种被称为位域的特殊的类数据成员,它可以被声明用来存放特定数目的位。在类体中相邻定义的位域,如果可能的话,它们会被放在同一个整数的连续位中,并以此提供空间压缩)。

//sizeofdemo2.c

#include <stdio.h>

typedef struct tagSTRUCT{

unsigned char x:4; //表示占用4个bit

unsigned char y:4;

} STRUCT;

int main()

{

printf("sizeof(STRUCT) = %d\n", sizeof(STRUCT)); //(4 + 4) / 8 = 1

return 0;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航