C++编程失乐园

致力于解决论坛的不足,探讨C++的原理

C++随笔 之 C++测试题目

下面这段代码的输出是多少(在32位机上).
    char *p;
    char *q[20];
    char *m[20][20];
    int (*n)[10];
    struct MyStruct
    {
      char dda;
      double dda1;
      int type ;
    };
    MyStruct k;
    printf("%d %d %d %d %d",sizeof(p),sizeof(q),sizeof(m),sizeof(n),sizeof(k));

posted on 2006-12-25 13:42 木木头 阅读(478) 评论(4)  编辑 收藏 引用 所属分类: C++特性

评论

# re: C++测试题目 2006-12-25 13:43 cppLock

大家看了我下面的描述可以比较清楚的计算出来了  回复  更多评论   

# re: C++随笔 之 C++测试题目 2007-09-08 22:46 zmy12006@hotmail.com

这个变量所占的字节数好像是取决于编译其的,与目标机器无关!就同在vs2005下的c++编译器设置为多字符集和UNICode类型都导致char的大小不一样!如果你自己会做编译器的话,你都可以为你编译器做个超大类型的整型,我这个想法不知道对否  回复  更多评论   

# re: C++随笔 之 C++测试题目 2007-09-08 23:49 zmy12006@hotmail.com

你所说的32位机是指指针占4 ,这个肯定没问题,就那个结构体是系统默认按照8字节对齐的,#pragma pack(1),采用1字节对齐就会达到预期效果,如果不采用这个,尽量的将同类的放一起,小的与小的放一起,也会达到最节约内存的目的,系统要内存对齐是为了提高存储速度用的,所以定义结构体变量位置摆放就要注意了   回复  更多评论   

# re: C++随笔 之 C++测试题目 2007-09-13 10:21 试了一下

struct MyStruct
{
char dda;
double dda1;
int type ;
};
中如果把int type;放到double dda1;前会右24变成16  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2007年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

统计

常用链接

留言簿(3)

随笔分类(29)

搜索

最新随笔

最新评论