1.
char str1[] = “Hello” ;
char str2[100] = “Hello” ;
计算:
sizeof(str1)=6 //字符串的长度
sizeof(str2)=100 //数组的大小
2.
void Func ( char str[100])
{
请计算:
sizeof( str ) = 4 //传递的是地址
}
3.
typedef struct student
{
}stu;
int main(int argc, char **argv)
{
stu s1;
sizeof(s1);
}
请计算:
如果是.c,sizeof(s1)=0或1;//GCC是0,G++是1;
如果是.cpp,sizeof(s1)=1; //G++;
//在C语言中,结构体的长度等于各数据项长度之和,对于空结构体,sizeof == 1;因为必须保证结构体的每一个实例在内存中都有独一无二的地址。至于C语言中的空结构体在gcc中sizeof为什么会是0,而不是1,估计gcc的编译器扩展后的问题
4.struct BF1
{
char f1 : 3;
char f2 : 4;
char f3 : 5;
};
计算:
sizeof(BF1)=2
其内存布局为:
|_f1__|__f2__|_|____f3___|____|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|
0 3 7 8 13 16
位域类型为char,第1个字节仅能容纳下f1和f2,所以f2被压缩到第1个字节中,而f3只能从下一个字节开始。因此sizeof(BF1)的结果为2
阅读(1596) | 评论(0) | 转发(1) |