Chinaunix首页 | 论坛 | 博客
  • 博客访问: 424422
  • 博文数量: 205
  • 博客积分: 5630
  • 博客等级: 大校
  • 技术积分: 1945
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-06 20:28
文章分类

全部博文(205)

文章存档

2016年(1)

2015年(6)

2014年(9)

2013年(10)

2012年(53)

2011年(25)

2010年(87)

2009年(14)

分类: C/C++

2010-03-05 16:51:12

1. 例子
#include
#include
#include
typedef struct A
{
 int a;
 int b;
 int data[0];
}A_t;
struct B : public A_t
{
 int c;
 int d;
};
int mytest(int aaa, int bbb)
{
 struct A *aa = ( A_t *)malloc(sizeof(A_t) + sizeof(int)*bbb);
 aa->a = aaa;
 aa->b = bbb;
// memset(aa->data, 1, aa->b);
 struct B *bb = (struct B *)malloc(sizeof(struct B));
 bb->c = 3;
 bb->d = 4;

 aa = (struct A *)bb; //关键地方在这里
 struct B *cc = (struct B *)aa;
 
 printf("aa->a=%d\n",aa->a);
 printf("aa->b=%d\n",aa->b);
 printf("*********\n");
 printf("bb->a=%d\n",bb->a);
 printf("bb->b=%d\n",bb->b);
 printf("bb->c=%d\n",bb->c);
 printf("bb->d=%d\n",bb->d);
 printf("*********\n");
 printf("cc->a=%d\n",cc->a);
 printf("cc->b=%d\n",cc->b);
 printf("cc->c=%d\n",cc->c);
 printf("cc->d=%d\n",cc->d);
 
 return 0;
}
int main()
{
 mytest(1,2);
 return 0;
}
2. 运行结果
# ./qzzh
aa->a=0
aa->b=0
*********
bb->a=0
bb->b=0
bb->c=3
bb->d=4
*********
cc->a=0
cc->b=0
cc->c=3
cc->d=4
3.解释
struct A中的data[0]代表A可变长度,因此malloc时要把这长度一起malloc出来,这样就可以用了。
阅读(590) | 评论(0) | 转发(0) |
0

上一篇:c++强制转换的分析

下一篇:零长度数组

给主人留下些什么吧!~~