实例
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 ;
}
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 ;
}