Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101868
  • 博文数量: 20
  • 博客积分: 1610
  • 博客等级: 上尉
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-22 16:05
文章分类

全部博文(20)

文章存档

2012年(1)

2011年(8)

2010年(11)

我的朋友

分类: C/C++

2011-04-19 14:53:25

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) |
给主人留下些什么吧!~~